ZGlmZiAtLWdpdCBhLy5jbGFuZy1mb3JtYXQgYi8uY2xhbmctZm9ybWF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NjE0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi8uY2xhbmctZm9ybWF0CkBAIC0wLDAgKzEsMTMgQEAKK0Jhc2VkT25TdHlsZTogR29vZ2xlCitTdGFuZGFyZDogQ3BwMTEKK0FjY2Vzc01vZGlmaWVyT2Zmc2V0OiAtMgorQWxsb3dTaG9ydEZ1bmN0aW9uc09uQVNpbmdsZUxpbmU6IElubGluZQorQ29sdW1uTGltaXQ6IDEwMAorQ29tbWVudFByYWdtYXM6IE5PTElOVDouKgorRGVyaXZlUG9pbnRlckFsaWdubWVudDogZmFsc2UKK0luY2x1ZGVCbG9ja3M6IFByZXNlcnZlCitJbmRlbnRXaWR0aDogNAorQ29udGludWF0aW9uSW5kZW50V2lkdGg6IDgKK1BvaW50ZXJBbGlnbm1lbnQ6IExlZnQKK1RhYldpZHRoOiA0CitVc2VUYWI6IE5ldmVyCmRpZmYgLS1naXQgYS9hcGV4L09XTkVSUyBiL2FwZXgvT1dORVJTCmluZGV4IDU1ODdmNWYuLjU0ODAyZDQgMTAwNjQ0Ci0tLSBhL2FwZXgvT1dORVJTCisrKyBiL2FwZXgvT1dORVJTCkBAIC0xLDYgKzEsNyBAQAotY2h6QGdvb2dsZS5jb20KLWR3a2FuZ0Bnb29nbGUuY29tCitlc3NpY2tAZ29vZ2xlLmNvbQogaml5b25nQGdvb2dsZS5jb20KIGxham9zQGdvb2dsZS5jb20KLW1hcmNvbmVAZ29vZ2xlLmNvbQotd2ppYUBnb29nbGUuY29tCituY2hhbGtvQGdvb2dsZS5jb20KKworaW5jbHVkZSBwbGF0Zm9ybS9wYWNrYWdlcy9tb2R1bGVzL2NvbW1vbjovTU9EVUxFU19PV05FUlMKKwpkaWZmIC0tZ2l0IGEvY2FtZXJhL09XTkVSUyBiL2NhbWVyYS9PV05FUlMKaW5kZXggMWI1NDhlNC4uMmExZDUyMyAxMDA2NDQKLS0tIGEvY2FtZXJhL09XTkVSUworKysgYi9jYW1lcmEvT1dORVJTCkBAIC0xLDMgKzEsNCBAQAorCiAjIEJ1ZyBjb21wb25lbnQ6IDQxNzI3CiBldGFsdmFsYUBnb29nbGUuY29tCiBhcmFrZXNoQGdvb2dsZS5jb20KQEAgLTUsNCArNiwzIEBACiBqY2hvd2RoYXJ5QGdvb2dsZS5jb20KIHNodXpoZW53YW5nQGdvb2dsZS5jb20KIHJ1Y2hhbWtAZ29vZ2xlLmNvbQotCmRpZmYgLS1naXQgYS9jYW1lcmEvbmRrL2ltcGwvQUNhbWVyYU1hbmFnZXIuaCBiL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhTWFuYWdlci5oCmluZGV4IGNjYmZhYTkuLmRhODg3YTIgMTAwNjQ0Ci0tLSBhL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhTWFuYWdlci5oCisrKyBiL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhTWFuYWdlci5oCkBAIC0xMzksNiArMTM5LDggQEAKICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICAgICAgfQogICAgICAgICBib29sIG9wZXJhdG9yIDwgKGNvbnN0IENhbGxiYWNrJiBvdGhlcikgY29uc3QgeworI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xb3JkZXJlZC1jb21wYXJlLWZ1bmN0aW9uLXBvaW50ZXJzIgogICAgICAgICAgICAgaWYgKCp0aGlzID09IG90aGVyKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBpZiAobUNvbnRleHQgIT0gb3RoZXIubUNvbnRleHQpIHJldHVybiBtQ29udGV4dCA8IG90aGVyLm1Db250ZXh0OwogICAgICAgICAgICAgaWYgKG1QaHlzaWNhbENhbUF2YWlsYWJsZSAhPSBvdGhlci5tUGh5c2ljYWxDYW1BdmFpbGFibGUpIHsKQEAgLTE1Miw2ICsxNTQsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1BdmFpbGFibGUgIT0gb3RoZXIubUF2YWlsYWJsZSkgcmV0dXJuIG1BdmFpbGFibGUgPCBvdGhlci5tQXZhaWxhYmxlOwogICAgICAgICAgICAgcmV0dXJuIG1VbmF2YWlsYWJsZSA8IG90aGVyLm1VbmF2YWlsYWJsZTsKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCiAgICAgICAgIH0KICAgICAgICAgYm9vbCBvcGVyYXRvciA+IChjb25zdCBDYWxsYmFjayYgb3RoZXIpIGNvbnN0IHsKICAgICAgICAgICAgIHJldHVybiAoKnRoaXMgIT0gb3RoZXIgJiYgISgqdGhpcyA8IG90aGVyKSk7CmRpZmYgLS1naXQgYS9jYW1lcmEvbmRrL25ka192ZW5kb3IvaW1wbC9BQ2FtZXJhTWFuYWdlci5oIGIvY2FtZXJhL25kay9uZGtfdmVuZG9yL2ltcGwvQUNhbWVyYU1hbmFnZXIuaAppbmRleCA4MzU5YmIxLi40NjYzNTI5IDEwMDY0NAotLS0gYS9jYW1lcmEvbmRrL25ka192ZW5kb3IvaW1wbC9BQ2FtZXJhTWFuYWdlci5oCisrKyBiL2NhbWVyYS9uZGsvbmRrX3ZlbmRvci9pbXBsL0FDYW1lcmFNYW5hZ2VyLmgKQEAgLTEzNiw2ICsxMzYsOCBAQAogICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwogICAgICAgICB9CiAgICAgICAgIGJvb2wgb3BlcmF0b3IgPCAoY29uc3QgQ2FsbGJhY2smIG90aGVyKSBjb25zdCB7CisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdvcmRlcmVkLWNvbXBhcmUtZnVuY3Rpb24tcG9pbnRlcnMiCiAgICAgICAgICAgICBpZiAoKnRoaXMgPT0gb3RoZXIpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGlmIChtQ29udGV4dCAhPSBvdGhlci5tQ29udGV4dCkgcmV0dXJuIG1Db250ZXh0IDwgb3RoZXIubUNvbnRleHQ7CiAgICAgICAgICAgICBpZiAobUF2YWlsYWJsZSAhPSBvdGhlci5tQXZhaWxhYmxlKSByZXR1cm4gbUF2YWlsYWJsZSA8IG90aGVyLm1BdmFpbGFibGU7CkBAIC0xNDYsNiArMTQ4LDcgQEAKICAgICAgICAgICAgIGlmIChtUGh5c2ljYWxDYW1VbmF2YWlsYWJsZSAhPSBvdGhlci5tUGh5c2ljYWxDYW1VbmF2YWlsYWJsZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1QaHlzaWNhbENhbVVuYXZhaWxhYmxlIDwgb3RoZXIubVBoeXNpY2FsQ2FtVW5hdmFpbGFibGU7CiAgICAgICAgICAgICByZXR1cm4gbVVuYXZhaWxhYmxlIDwgb3RoZXIubVVuYXZhaWxhYmxlOworI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKICAgICAgICAgfQogICAgICAgICBib29sIG9wZXJhdG9yID4gKGNvbnN0IENhbGxiYWNrJiBvdGhlcikgY29uc3QgewogICAgICAgICAgICAgcmV0dXJuICgqdGhpcyAhPSBvdGhlciAmJiAhKCp0aGlzIDwgb3RoZXIpKTsKZGlmZiAtLWdpdCBhL2RybS9saWJtZWRpYWRybS9BbmRyb2lkLmJwIGIvZHJtL2xpYm1lZGlhZHJtL0FuZHJvaWQuYnAKaW5kZXggMGZmZTYyNi4uNzFkZjU4YyAxMDA2NDQKLS0tIGEvZHJtL2xpYm1lZGlhZHJtL0FuZHJvaWQuYnAKKysrIGIvZHJtL2xpYm1lZGlhZHJtL0FuZHJvaWQuYnAKQEAgLTY2LDcgKzY2LDcgQEAKICAgICBdLAogCiAgICAgc3RhdGljX2xpYnM6IFsKLSAgICAgICAgInJlc291cmNlbWFuYWdlcl9haWRsX2ludGVyZmFjZS1uZGtfcGxhdGZvcm0iLAorICAgICAgICAicmVzb3VyY2VtYW5hZ2VyX2FpZGxfaW50ZXJmYWNlLW5kayIsCiAgICAgXSwKIAogICAgIGV4cG9ydF9zaGFyZWRfbGliX2hlYWRlcnM6IFsKZGlmZiAtLWdpdCBhL2RybS9saWJtZWRpYWRybS9mdXp6ZXIvQW5kcm9pZC5icCBiL2RybS9saWJtZWRpYWRybS9mdXp6ZXIvQW5kcm9pZC5icAppbmRleCA3MjgxMDY2Li40OWJiYWQ0IDEwMDY0NAotLS0gYS9kcm0vbGlibWVkaWFkcm0vZnV6emVyL0FuZHJvaWQuYnAKKysrIGIvZHJtL2xpYm1lZGlhZHJtL2Z1enplci9BbmRyb2lkLmJwCkBAIC0zNSw3ICszNSw3IEBACiAgICAgc3RhdGljX2xpYnM6IFsKICAgICAgICAgImxpYm1lZGlhZHJtIiwKICAgICAgICAgImxpYmxvZyIsCi0gICAgICAgICJyZXNvdXJjZW1hbmFnZXJfYWlkbF9pbnRlcmZhY2UtbmRrX3BsYXRmb3JtIiwKKyAgICAgICAgInJlc291cmNlbWFuYWdlcl9haWRsX2ludGVyZmFjZS1uZGsiLAogICAgIF0sCiAgICAgaGVhZGVyX2xpYnM6IFsKICAgICAgICAgImxpYm1lZGlhX2hlYWRlcnMiLApkaWZmIC0tZ2l0IGEvbWVkaWEvT1dORVJTIGIvbWVkaWEvT1dORVJTCmluZGV4IDRjZjQ4NzAuLjA5OTcyOWYgMTAwNjQ0Ci0tLSBhL21lZGlhL09XTkVSUworKysgYi9tZWRpYS9PV05FUlMKQEAgLTE1LDYgKzE1LDcgQEAKIHJvYmVydHNoaWhAZ29vZ2xlLmNvbQogdGFrbGVlQGdvb2dsZS5jb20KIHdvbnNpa0Bnb29nbGUuY29tCit5dGFpQGdvb2dsZS5jb20KIAogIyBnby9hbmRyb2lkLWZ3ay1tZWRpYS1zb2x1dGlvbnMgZm9yIGluZm8gb24gYXJlYXMgb2Ygb3duZXJzaGlwLgogaW5jbHVkZSBwbGF0Zm9ybS9mcmFtZXdvcmtzL2F2Oi9tZWRpYS9qYW5pdG9ycy9tZWRpYV9zb2x1dGlvbnNfT1dORVJTCmRpZmYgLS1naXQgYS9tZWRpYS9hdWRpb3NlcnZlci9BbmRyb2lkLmJwIGIvbWVkaWEvYXVkaW9zZXJ2ZXIvQW5kcm9pZC5icAppbmRleCBiZTI1ZmZiLi5lNWY5OTA3IDEwMDY0NAotLS0gYS9tZWRpYS9hdWRpb3NlcnZlci9BbmRyb2lkLmJwCisrKyBiL21lZGlhL2F1ZGlvc2VydmVyL0FuZHJvaWQuYnAKQEAgLTI1LDYgKzI1LDcgQEAKICAgICBdLAogCiAgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgInBhY2thZ2VtYW5hZ2VyX2FpZGwtY3BwIiwKICAgICAgICAgImxpYmFhdWRpb3NlcnZpY2UiLAogICAgICAgICAibGliYXVkaW9mbGluZ2VyIiwKICAgICAgICAgImxpYmF1ZGlvcG9saWN5c2VydmljZSIsCkBAIC00MSw3ICs0Miw2IEBACiAgICAgICAgICJsaWJwb3dlcm1hbmFnZXIiLAogICAgICAgICAibGlidXRpbHMiLAogICAgICAgICAibGlidmlicmF0b3IiLAotCiAgICAgXSwKIAogICAgIC8vIFRPRE8gY2hlY2sgaWYgd2Ugc3RpbGwgbmVlZCBhbGwgb2YgdGhlc2UgaW5jbHVkZSBkaXJlY3RvcmllcwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvaGV2Yy9DMlNvZnRIZXZjRW5jLmNwcCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2hldmMvQzJTb2Z0SGV2Y0VuYy5jcHAKaW5kZXggNGJjMTc3Ny4uYjdhNTY4NiAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvaGV2Yy9DMlNvZnRIZXZjRW5jLmNwcAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9oZXZjL0MyU29mdEhldmNFbmMuY3BwCkBAIC0yNDUsNiArMjQ1LDE5IEBACiAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAud2l0aFNldHRlcihDb2RlZENvbG9yQXNwZWN0c1NldHRlciwgbUNvbG9yQXNwZWN0cykKICAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1QaWN0dXJlUXVhbnRpemF0aW9uLCBDMl9QQVJBTUtFWV9QSUNUVVJFX1FVQU5USVpBVElPTikKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQoQzJTdHJlYW1QaWN0dXJlUXVhbnRpemF0aW9uVHVuaW5nOjpvdXRwdXQ6OkFsbG9jU2hhcmVkKAorICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBmbGV4Q291bnQgKi8sIDB1IC8qIHN0cmVhbSAqLykpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtUGljdHVyZVF1YW50aXphdGlvbiwgbS52YWx1ZXNbMF0udHlwZV8pLm9uZU9mKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7QzJDb25maWc6OnBpY3R1cmVfdHlwZV90KElfRlJBTUUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpwaWN0dXJlX3R5cGVfdChQX0ZSQU1FKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6cGljdHVyZV90eXBlX3QoQl9GUkFNRSl9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJGKG1QaWN0dXJlUXVhbnRpemF0aW9uLCBtLnZhbHVlc1swXS5taW4pLmFueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkYobVBpY3R1cmVRdWFudGl6YXRpb24sIG0udmFsdWVzWzBdLm1heCkuYW55KCl9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFBpY3R1cmVRdWFudGl6YXRpb25TZXR0ZXIpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBDMlIgSW5wdXREZWxheVNldHRlcigKQEAgLTQ2NCw5ICs0NzcsNjkgQEAKICAgICAgICAgbWUuc2V0KCkubWF0cml4ID0gY29kZWQudi5tYXRyaXg7CiAgICAgICAgIHJldHVybiBDMlI6Ok9rKCk7CiAgICAgfQorICAgIHN0YXRpYyBDMlIgUGljdHVyZVF1YW50aXphdGlvblNldHRlcihib29sIG1heUJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMlA8QzJTdHJlYW1QaWN0dXJlUXVhbnRpemF0aW9uVHVuaW5nOjpvdXRwdXQ+ICZtZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKworICAgICAgICAvLyB0aGVzZSBhcmUgdGhlIG9uZXMgd2UncmUgZ29pbmcgdG8gc2V0LCBzbyB3YW50IHRoZW0gdG8gZGVmYXVsdAorICAgICAgICAvLyB0byB0aGUgREVGQVVMVCB2YWx1ZXMgZm9yIHRoZSBjb2RlYworICAgICAgICBpbnQzMl90IGlNaW4gPSBIRVZDX1FQX01JTiwgcE1pbiA9IEhFVkNfUVBfTUlOLCBiTWluID0gSEVWQ19RUF9NSU47CisgICAgICAgIGludDMyX3QgaU1heCA9IEhFVkNfUVBfTUFYLCBwTWF4ID0gSEVWQ19RUF9NQVgsIGJNYXggPSBIRVZDX1FQX01BWDsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1lLnYuZmxleENvdW50KCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgQzJQaWN0dXJlUXVhbnRpemF0aW9uU3RydWN0ICZsYXllciA9IG1lLnYubS52YWx1ZXNbaV07CisKKyAgICAgICAgICAgIC8vIGxheWVyTWluIGlzIGNsYW1wZWQgdG8gW0hFVkNfUVBfTUlOLCBsYXllck1heF0gdG8gYXZvaWQgZXJyb3IKKyAgICAgICAgICAgIC8vIGNhc2VzIHdoZXJlIGxheWVyLm1pbiA+IGxheWVyLm1heAorICAgICAgICAgICAgaW50MzJfdCBsYXllck1heCA9IHN0ZDo6Y2xhbXAobGF5ZXIubWF4LCBIRVZDX1FQX01JTiwgSEVWQ19RUF9NQVgpOworICAgICAgICAgICAgaW50MzJfdCBsYXllck1pbiA9IHN0ZDo6Y2xhbXAobGF5ZXIubWluLCBIRVZDX1FQX01JTiwgbGF5ZXJNYXgpOworICAgICAgICAgICAgaWYgKGxheWVyLnR5cGVfID09IEMyQ29uZmlnOjpwaWN0dXJlX3R5cGVfdChJX0ZSQU1FKSkgeworICAgICAgICAgICAgICAgIGlNYXggPSBsYXllck1heDsKKyAgICAgICAgICAgICAgICBpTWluID0gbGF5ZXJNaW47CisgICAgICAgICAgICAgICAgQUxPR1YoImlNaW4gJWQgaU1heCAlZCIsIGlNaW4sIGlNYXgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChsYXllci50eXBlXyA9PSBDMkNvbmZpZzo6cGljdHVyZV90eXBlX3QoUF9GUkFNRSkpIHsKKyAgICAgICAgICAgICAgICBwTWF4ID0gbGF5ZXJNYXg7CisgICAgICAgICAgICAgICAgcE1pbiA9IGxheWVyTWluOworICAgICAgICAgICAgICAgIEFMT0dWKCJwTWluICVkIHBNYXggJWQiLCBwTWluLCBwTWF4KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5ZXIudHlwZV8gPT0gQzJDb25maWc6OnBpY3R1cmVfdHlwZV90KEJfRlJBTUUpKSB7CisgICAgICAgICAgICAgICAgYk1heCA9IGxheWVyTWF4OworICAgICAgICAgICAgICAgIGJNaW4gPSBsYXllck1pbjsKKyAgICAgICAgICAgICAgICBBTE9HVigiYk1pbiAlZCBiTWF4ICVkIiwgYk1pbiwgYk1heCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBBTE9HVigiUGljdHVyZVF1YW50aXphdGlvblNldHRlcihlbnRyeSk6IGkgJWQtJWQgcCAlZC0lZCBiICVkLSVkIiwKKyAgICAgICAgICAgICAgaU1pbiwgaU1heCwgcE1pbiwgcE1heCwgYk1pbiwgYk1heCk7CisKKyAgICAgICAgaW50MzJfdCBtYXhGcmFtZVFQID0gc3RkOjptaW4oc3RkOjptaW4oaU1heCwgcE1heCksIGJNYXgpOworICAgICAgICBpbnQzMl90IG1pbkZyYW1lUVAgPSBzdGQ6Om1heChzdGQ6Om1heChpTWluLCBwTWluKSwgYk1pbik7CisgICAgICAgIGlmIChtaW5GcmFtZVFQID4gbWF4RnJhbWVRUCkgeworICAgICAgICAgICAgbWluRnJhbWVRUCA9IG1heEZyYW1lUVA7CisgICAgICAgIH0KKworICAgICAgICAvLyBwdXQgdGhlbSBiYWNrIGludG8gdGhlIHN0cnVjdHVyZQorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1lLnYuZmxleENvdW50KCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgQzJQaWN0dXJlUXVhbnRpemF0aW9uU3RydWN0ICZsYXllciA9IG1lLnYubS52YWx1ZXNbaV07CisKKyAgICAgICAgICAgIGlmIChsYXllci50eXBlXyA9PSBDMkNvbmZpZzo6cGljdHVyZV90eXBlX3QoSV9GUkFNRSkgfHwKKyAgICAgICAgICAgICAgICBsYXllci50eXBlXyA9PSBDMkNvbmZpZzo6cGljdHVyZV90eXBlX3QoUF9GUkFNRSkgfHwKKyAgICAgICAgICAgICAgICBsYXllci50eXBlXyA9PSBDMkNvbmZpZzo6cGljdHVyZV90eXBlX3QoQl9GUkFNRSkpIHsKKyAgICAgICAgICAgICAgICBtZS5zZXQoKS5tLnZhbHVlc1tpXS5tYXggPSBtYXhGcmFtZVFQOworICAgICAgICAgICAgICAgIG1lLnNldCgpLm0udmFsdWVzW2ldLm1pbiA9IG1pbkZyYW1lUVA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBBTE9HVigiUGljdHVyZVF1YW50aXphdGlvblNldHRlcihleGl0KTogaSA9IHAgPSBiID0gJWQtJWQiLAorICAgICAgICAgICAgICBtaW5GcmFtZVFQLCBtYXhGcmFtZVFQKTsKKworICAgICAgICByZXR1cm4gQzJSOjpPaygpOworICAgIH0KICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjpvdXRwdXQ+IGdldENvZGVkQ29sb3JBc3BlY3RzX2woKSB7CiAgICAgICAgIHJldHVybiBtQ29kZWRDb2xvckFzcGVjdHM7CiAgICAgfQorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVBpY3R1cmVRdWFudGl6YXRpb25UdW5pbmc6Om91dHB1dD4gZ2V0UGljdHVyZVF1YW50aXphdGlvbl9sKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbVBpY3R1cmVRdWFudGl6YXRpb247CisgICAgfQogCiAgICBwcml2YXRlOgogICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVVzYWdlVHVuaW5nOjppbnB1dD4gbVVzYWdlOwpAQCAtNDgyLDYgKzU1NSw3IEBACiAgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtR29wVHVuaW5nOjpvdXRwdXQ+IG1Hb3A7CiAgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQ29sb3JBc3BlY3RzSW5mbzo6aW5wdXQ+IG1Db2xvckFzcGVjdHM7CiAgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQ29sb3JBc3BlY3RzSW5mbzo6b3V0cHV0PiBtQ29kZWRDb2xvckFzcGVjdHM7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtUGljdHVyZVF1YW50aXphdGlvblR1bmluZzo6b3V0cHV0PiBtUGljdHVyZVF1YW50aXphdGlvbjsKIH07CiAKIHN0YXRpYyBzaXplX3QgR2V0Q1BVQ29yZUNvdW50KCkgewpAQCAtNjU0LDEyICs3MjgsNDEgQEAKICAgICAgICAgbUVuY1BhcmFtcy5zX2NvZGluZ190b29sc19wcm1zLmk0X21heF90ZW1wb3JhbF9sYXllcnMgPSAzOwogICAgIH0KIAotICAgIHN3aXRjaCAobUJpdHJhdGVNb2RlLT52YWx1ZSkgewotICAgICAgICBjYXNlIEMyQ29uZmlnOjpCSVRSQVRFX0lHTk9SRToKLSAgICAgICAgICAgIG1FbmNQYXJhbXMuc19jb25maWdfcHJtcy5pNF9yYXRlX2NvbnRyb2xfbW9kZSA9IDM7Ci0gICAgICAgICAgICBtRW5jUGFyYW1zLnNfdGd0X2x5cl9wcm1zLmFzX3RndF9wYXJhbXNbMF0uYWk0X2ZyYW1lX3FwWzBdID0KLSAgICAgICAgICAgICAgICBnZXRRcEZyb21RdWFsaXR5KG1RdWFsaXR5LT52YWx1ZSk7CisgICAgLy8gd2UgcmVzb2x2ZWQgb3V0LW9mLWJvdW5kIGFuZCB1bnNwZWNpZmllZCB2YWx1ZXMgaW4gUGljdHVyZVF1YW50aXphdGlvblNldHRlcigpCisgICAgLy8gc28gd2UgY2FuIHN0YXJ0IHdpdGggZGVmYXVsdHMgdGhhdCBhcmUgb3ZlcnJpZGRlbiBhcyBuZWVkZWQuCisgICAgaW50MzJfdCBtYXhGcmFtZVFQID0gbUVuY1BhcmFtcy5zX2NvbmZpZ19wcm1zLmk0X21heF9mcmFtZV9xcDsKKyAgICBpbnQzMl90IG1pbkZyYW1lUVAgPSBtRW5jUGFyYW1zLnNfY29uZmlnX3BybXMuaTRfbWluX2ZyYW1lX3FwOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtUXBCb3VuZHMtPmZsZXhDb3VudCgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgQzJQaWN0dXJlUXVhbnRpemF0aW9uU3RydWN0ICZsYXllciA9IG1RcEJvdW5kcy0+bS52YWx1ZXNbaV07CisKKyAgICAgICAgLy8gbm8gbmVlZCB0byBsb29wLCBoZXZjIGxpYnJhcnkgdGFrZXMgc2FtZSByYW5nZSBmb3IgSS9QL0IgcGljdHVyZSB0eXBlCisgICAgICAgIGlmIChsYXllci50eXBlXyA9PSBDMkNvbmZpZzo6cGljdHVyZV90eXBlX3QoSV9GUkFNRSkgfHwKKyAgICAgICAgICAgIGxheWVyLnR5cGVfID09IEMyQ29uZmlnOjpwaWN0dXJlX3R5cGVfdChQX0ZSQU1FKSB8fAorICAgICAgICAgICAgbGF5ZXIudHlwZV8gPT0gQzJDb25maWc6OnBpY3R1cmVfdHlwZV90KEJfRlJBTUUpKSB7CisKKyAgICAgICAgICAgIG1heEZyYW1lUVAgPSBsYXllci5tYXg7CisgICAgICAgICAgICBtaW5GcmFtZVFQID0gbGF5ZXIubWluOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgbUVuY1BhcmFtcy5zX2NvbmZpZ19wcm1zLmk0X21heF9mcmFtZV9xcCA9IG1heEZyYW1lUVA7CisgICAgbUVuY1BhcmFtcy5zX2NvbmZpZ19wcm1zLmk0X21pbl9mcmFtZV9xcCA9IG1pbkZyYW1lUVA7CisKKyAgICBBTE9HVigiTWF4RnJhbWVRcDogJWQgTWluRnJhbWVRcDogJWQiLCBtYXhGcmFtZVFQLCBtaW5GcmFtZVFQKTsKKworICAgIG1FbmNQYXJhbXMuc190Z3RfbHlyX3BybXMuYXNfdGd0X3BhcmFtc1swXS5haTRfZnJhbWVfcXBbMF0gPQorICAgICAgICBzdGQ6OmNsYW1wKGtEZWZhdWx0SW5pdFFQLCBtaW5GcmFtZVFQLCBtYXhGcmFtZVFQKTsKKworICAgIHN3aXRjaCAobUJpdHJhdGVNb2RlLT52YWx1ZSkgeworICAgICAgICBjYXNlIEMyQ29uZmlnOjpCSVRSQVRFX0lHTk9SRTogeworICAgICAgICAgICAgbUVuY1BhcmFtcy5zX2NvbmZpZ19wcm1zLmk0X3JhdGVfY29udHJvbF9tb2RlID0gMzsKKyAgICAgICAgICAgIC8vIGVuc3VyZSBpbml0aWFsIHFwIHZhbHVlcyBhcmUgd2l0aGluIG91ciBuZXdseSBjb25maWd1cmVkIGJvdW5kcworICAgICAgICAgICAgaW50MzJfdCBmcmFtZVFwID0gZ2V0UXBGcm9tUXVhbGl0eShtUXVhbGl0eS0+dmFsdWUpOworICAgICAgICAgICAgbUVuY1BhcmFtcy5zX3RndF9seXJfcHJtcy5hc190Z3RfcGFyYW1zWzBdLmFpNF9mcmFtZV9xcFswXSA9CisgICAgICAgICAgICAgICAgc3RkOjpjbGFtcChmcmFtZVFwLCBtaW5GcmFtZVFQLCBtYXhGcmFtZVFQKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgQzJDb25maWc6OkJJVFJBVEVfQ09OU1Q6CiAgICAgICAgICAgICBtRW5jUGFyYW1zLnNfY29uZmlnX3BybXMuaTRfcmF0ZV9jb250cm9sX21vZGUgPSA1OwogICAgICAgICAgICAgYnJlYWs7CkBAIC03MjMsNiArODI2LDcgQEAKICAgICAgICAgbUdvcCA9IG1JbnRmLT5nZXRHb3BfbCgpOwogICAgICAgICBtUmVxdWVzdFN5bmMgPSBtSW50Zi0+Z2V0UmVxdWVzdFN5bmNfbCgpOwogICAgICAgICBtQ29sb3JBc3BlY3RzID0gbUludGYtPmdldENvZGVkQ29sb3JBc3BlY3RzX2woKTsKKyAgICAgICAgbVFwQm91bmRzID0gbUludGYtPmdldFBpY3R1cmVRdWFudGl6YXRpb25fbCgpOzsKICAgICB9CiAKICAgICBjMl9zdGF0dXNfdCBzdGF0dXMgPSBpbml0RW5jUGFyYW1zKCk7CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9oZXZjL0MyU29mdEhldmNFbmMuaCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2hldmMvQzJTb2Z0SGV2Y0VuYy5oCmluZGV4IDlkYmY2ODIuLjQyMTdhOGIgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2hldmMvQzJTb2Z0SGV2Y0VuYy5oCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2hldmMvQzJTb2Z0SGV2Y0VuYy5oCkBAIC00Miw2ICs0MiwxMSBAQAogI2RlZmluZSBERUZBVUxUX0JfRlJBTUVTICAgICAwCiAjZGVmaW5lIERFRkFVTFRfUkNfTE9PS0FIRUFEIDAKIAorI2RlZmluZSBIRVZDX1FQX01JTiAxCisjZGVmaW5lIEhFVkNfUVBfTUFYIDUxCisKK2NvbnN0ZXhwciBpbnQzMl90IGtEZWZhdWx0SW5pdFFQID0gMzI7CisKIHN0cnVjdCBDMlNvZnRIZXZjRW5jIDogcHVibGljIFNpbXBsZUMyQ29tcG9uZW50IHsKICAgICBjbGFzcyBJbnRmSW1wbDsKIApAQCAtOTAsNiArOTUsNyBAQAogICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUdvcFR1bmluZzo6b3V0cHV0PiBtR29wOwogICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVJlcXVlc3RTeW5jRnJhbWVUdW5pbmc6Om91dHB1dD4gbVJlcXVlc3RTeW5jOwogICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86Om91dHB1dD4gbUNvbG9yQXNwZWN0czsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1QaWN0dXJlUXVhbnRpemF0aW9uVHVuaW5nOjpvdXRwdXQ+IG1RcEJvdW5kczsKICNpZmRlZiBGSUxFX0RVTVBfRU5BQkxFCiAgICAgY2hhciBtSW5GaWxlWzIwMF07CiAgICAgY2hhciBtT3V0RmlsZVsyMDBdOwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXAzL0MyU29mdE1wM0RlYy5jcHAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcDMvQzJTb2Z0TXAzRGVjLmNwcAppbmRleCBlMzk0NjcwLi4xNDljNmVlIDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcDMvQzJTb2Z0TXAzRGVjLmNwcAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcDMvQzJTb2Z0TXAzRGVjLmNwcApAQCAtMzIxLDYgKzMyMSwxMyBAQAogICAgIHJldHVybiBDMl9PSzsKIH0KIAorc3RhdGljIHZvaWQgZmlsbEVtcHR5V29yayhjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaykgeworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IHdvcmstPmlucHV0LmZsYWdzOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwgPSB3b3JrLT5pbnB1dC5vcmRpbmFsOworICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMXU7Cit9CisKIC8vIFRPRE86IENhbiBvdmVyYWxsIGVycm9yIGNoZWNraW5nIGJlIGltcHJvdmVkPyBBcyBpbiB0aGUgY2hlY2sgZm9yIHZhbGlkaXR5IG9mCiAvLyAgICAgICB3b3JrLCBwb29sIHB0ciwgd29yay0+aW5wdXQuYnVmZmVycy5zaXplKCkgPT0gMSwgLi4uCiAvLyBUT0RPOiBCbGluZCByZW1vdmFsIG9mIDUyOSBzYW1wbGVzIGZyb20gdGhlIG91dHB1dCBtYXkgbm90IHdvcmsuIEJlY2F1c2UKQEAgLTQ4NiwxNyArNDkzLDE3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpbnQ2NF90IG91dFRpbWVTdGFtcCA9IG1Qcm9jZXNzZWRTYW1wbGVzICogMTAwMDAwMGxsIC8gc2FtcGxpbmdSYXRlOwotICAgIG1Qcm9jZXNzZWRTYW1wbGVzICs9ICgob3V0U2l6ZSAtIG91dE9mZnNldCkgLyAobnVtQ2hhbm5lbHMgKiBzaXplb2YoaW50MTZfdCkpKTsKLSAgICBBTE9HVigib3V0IGJ1ZmZlciBhdHRyLiBvZmZzZXQgJWQgc2l6ZSAlZCB0aW1lc3RhbXAgJSIgUFJJZDY0ICIgIiwgb3V0T2Zmc2V0LAotICAgICAgICAgIG91dFNpemUgLSBvdXRPZmZzZXQsIG1BbmNob3JUaW1lU3RhbXAgKyBvdXRUaW1lU3RhbXApOwotICAgIGRlY29kZWRTaXplcy5jbGVhcigpOwotICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IHdvcmstPmlucHV0LmZsYWdzOwotICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5idWZmZXJzLmNsZWFyKCk7Ci0gICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMucHVzaF9iYWNrKAotICAgICAgICAgICAgY3JlYXRlTGluZWFyQnVmZmVyKGJsb2NrLCBvdXRPZmZzZXQsIG91dFNpemUgLSBvdXRPZmZzZXQpKTsKLSAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbCA9IHdvcmstPmlucHV0Lm9yZGluYWw7Ci0gICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwudGltZXN0YW1wID0gbUFuY2hvclRpbWVTdGFtcCArIG91dFRpbWVTdGFtcDsKKyAgICBmaWxsRW1wdHlXb3JrKHdvcmspOworICAgIGlmIChzYW1wbGluZ1JhdGUgJiYgbnVtQ2hhbm5lbHMpIHsKKyAgICAgICAgaW50NjRfdCBvdXRUaW1lU3RhbXAgPSBtUHJvY2Vzc2VkU2FtcGxlcyAqIDEwMDAwMDBsbCAvIHNhbXBsaW5nUmF0ZTsKKyAgICAgICAgbVByb2Nlc3NlZFNhbXBsZXMgKz0gKChvdXRTaXplIC0gb3V0T2Zmc2V0KSAvIChudW1DaGFubmVscyAqIHNpemVvZihpbnQxNl90KSkpOworICAgICAgICBBTE9HVigib3V0IGJ1ZmZlciBhdHRyLiBvZmZzZXQgJWQgc2l6ZSAlZCB0aW1lc3RhbXAgJSIgUFJJZDY0ICIgIiwgb3V0T2Zmc2V0LAorICAgICAgICAgICAgICAgb3V0U2l6ZSAtIG91dE9mZnNldCwgbUFuY2hvclRpbWVTdGFtcCArIG91dFRpbWVTdGFtcCk7CisgICAgICAgIGRlY29kZWRTaXplcy5jbGVhcigpOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAgY3JlYXRlTGluZWFyQnVmZmVyKGJsb2NrLCBvdXRPZmZzZXQsIG91dFNpemUgLSBvdXRPZmZzZXQpKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwudGltZXN0YW1wID0gbUFuY2hvclRpbWVTdGFtcCArIG91dFRpbWVTdGFtcDsKKyAgICB9CiAgICAgaWYgKGVvcykgewogICAgICAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gdHJ1ZTsKICAgICAgICAgQUxPR1YoInNpZ25hbGxlZCBFT1MiKTsKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wZWc0X2gyNjMvQzJTb2Z0TXBlZzREZWMuY3BwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9DMlNvZnRNcGVnNERlYy5jcHAKaW5kZXggZGRkMzEyZi4uODFmNDY3OSAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9DMlNvZnRNcGVnNERlYy5jcHAKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9DMlNvZnRNcGVnNERlYy5jcHAKQEAgLTIyOCw3ICsyMjgsNiBAQAogICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+ICZpbnRmSW1wbCkKICAgICA6IFNpbXBsZUMyQ29tcG9uZW50KHN0ZDo6bWFrZV9zaGFyZWQ8U2ltcGxlSW50ZXJmYWNlPEludGZJbXBsPj4obmFtZSwgaWQsIGludGZJbXBsKSksCiAgICAgICBtSW50ZihpbnRmSW1wbCksCi0gICAgICBtRGVjSGFuZGxlKG51bGxwdHIpLAogICAgICAgbU91dHB1dEJ1ZmZlcnt9LAogICAgICAgbUluaXRpYWxpemVkKGZhbHNlKSB7CiB9CkBAIC0yNDQsOSArMjQzLDcgQEAKIAogYzJfc3RhdHVzX3QgQzJTb2Z0TXBlZzREZWM6Om9uU3RvcCgpIHsKICAgICBpZiAobUluaXRpYWxpemVkKSB7Ci0gICAgICAgIGlmIChtRGVjSGFuZGxlKSB7Ci0gICAgICAgICAgICBQVkNsZWFuVXBWaWRlb0RlY29kZXIobURlY0hhbmRsZSk7Ci0gICAgICAgIH0KKyAgICAgICAgUFZDbGVhblVwVmlkZW9EZWNvZGVyKCZtVmlkZW9EZWNDb250cm9scyk7CiAgICAgICAgIG1Jbml0aWFsaXplZCA9IGZhbHNlOwogICAgIH0KICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBrTnVtT3V0cHV0QnVmZmVyczsgKytpKSB7CkBAIC0yNjksMjggKzI2NiwxNSBAQAogfQogCiB2b2lkIEMyU29mdE1wZWc0RGVjOjpvblJlbGVhc2UoKSB7Ci0gICAgaWYgKG1Jbml0aWFsaXplZCkgewotICAgICAgICBpZiAobURlY0hhbmRsZSkgewotICAgICAgICAgICAgUFZDbGVhblVwVmlkZW9EZWNvZGVyKG1EZWNIYW5kbGUpOwotICAgICAgICAgICAgZGVsZXRlIG1EZWNIYW5kbGU7Ci0gICAgICAgICAgICBtRGVjSGFuZGxlID0gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICBtSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICB9CisgICAgKHZvaWQpb25TdG9wKCk7CiAgICAgaWYgKG1PdXRCbG9jaykgewogICAgICAgICBtT3V0QmxvY2sucmVzZXQoKTsKICAgICB9Ci0gICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwga051bU91dHB1dEJ1ZmZlcnM7ICsraSkgewotICAgICAgICBpZiAobU91dHB1dEJ1ZmZlcltpXSkgewotICAgICAgICAgICAgZnJlZShtT3V0cHV0QnVmZmVyW2ldKTsKLSAgICAgICAgICAgIG1PdXRwdXRCdWZmZXJbaV0gPSBudWxscHRyOwotICAgICAgICB9Ci0gICAgfQogfQogCiBjMl9zdGF0dXNfdCBDMlNvZnRNcGVnNERlYzo6b25GbHVzaF9zbSgpIHsKICAgICBpZiAobUluaXRpYWxpemVkKSB7Ci0gICAgICAgIGlmIChQVl9UUlVFICE9IFBWUmVzZXRWaWRlb0RlY29kZXIobURlY0hhbmRsZSkpIHsKKyAgICAgICAgaWYgKFBWX1RSVUUgIT0gUFZSZXNldFZpZGVvRGVjb2RlcigmbVZpZGVvRGVjQ29udHJvbHMpKSB7CiAgICAgICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOwogICAgICAgICB9CiAgICAgfQpAQCAtMzA1LDE0ICsyODksOCBAQAogI2Vsc2UKICAgICBtSXNNcGVnNCA9IGZhbHNlOwogI2VuZGlmCi0gICAgaWYgKCFtRGVjSGFuZGxlKSB7Ci0gICAgICAgIG1EZWNIYW5kbGUgPSBuZXcgdGFndmlkZW9EZWNDb250cm9sczsKLSAgICB9Ci0gICAgaWYgKCFtRGVjSGFuZGxlKSB7Ci0gICAgICAgIEFMT0dFKCJtRGVjSGFuZGxlIGlzIG51bGwiKTsKLSAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKLSAgICB9Ci0gICAgbWVtc2V0KG1EZWNIYW5kbGUsIDAsIHNpemVvZih0YWd2aWRlb0RlY0NvbnRyb2xzKSk7CisKKyAgICBtZW1zZXQoJm1WaWRlb0RlY0NvbnRyb2xzLCAwLCBzaXplb2YodGFndmlkZW9EZWNDb250cm9scykpOwogCiAgICAgLyogVE9ETzogYnJpbmcgdGhlc2UgdmFsdWVzIHRvIDM1MiBhbmQgMjg4LiBJdCBjYW5ub3QgYmUgZG9uZSBhcyBvZiBub3cKICAgICAgKiBiZWNhdXNlLCBoMjYzIGRvZXNuJ3Qgc2VlbSB0byBhbGxvdyBwb3J0IHJlY29uZmlndXJhdGlvbi4gSW4gT01YLCB0aGUKQEAgLTM2OCwxMCArMzQ2LDYgQEAKIH0KIAogYzJfc3RhdHVzX3QgQzJTb2Z0TXBlZzREZWM6OmVuc3VyZURlY29kZXJTdGF0ZShjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSB7Ci0gICAgaWYgKCFtRGVjSGFuZGxlKSB7Ci0gICAgICAgIEFMT0dFKCJub3Qgc3VwcG9zZWQgdG8gYmUgaGVyZSwgaW52YWxpZCBkZWNvZGVyIGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKLSAgICB9CiAKICAgICBtT3V0cHV0QnVmZmVyU2l6ZSA9IGFsaWduKG1JbnRmLT5nZXRNYXhXaWR0aCgpLCAxNikgKiBhbGlnbihtSW50Zi0+Z2V0TWF4SGVpZ2h0KCksIDE2KSAqIDMgLyAyOwogICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGtOdW1PdXRwdXRCdWZmZXJzOyArK2kpIHsKQEAgLTQwMiwxMCArMzc2LDEwIEBACiAKIGJvb2wgQzJTb2Z0TXBlZzREZWM6OmhhbmRsZVJlc0NoYW5nZShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaykgewogICAgIHVpbnQzMl90IGRpc3Bfd2lkdGgsIGRpc3BfaGVpZ2h0OwotICAgIFBWR2V0VmlkZW9EaW1lbnNpb25zKG1EZWNIYW5kbGUsIChpbnQzMiAqKSZkaXNwX3dpZHRoLCAoaW50MzIgKikmZGlzcF9oZWlnaHQpOworICAgIFBWR2V0VmlkZW9EaW1lbnNpb25zKCZtVmlkZW9EZWNDb250cm9scywgKGludDMyICopJmRpc3Bfd2lkdGgsIChpbnQzMiAqKSZkaXNwX2hlaWdodCk7CiAKICAgICB1aW50MzJfdCBidWZfd2lkdGgsIGJ1Zl9oZWlnaHQ7Ci0gICAgUFZHZXRCdWZmZXJEaW1lbnNpb25zKG1EZWNIYW5kbGUsIChpbnQzMiAqKSZidWZfd2lkdGgsIChpbnQzMiAqKSZidWZfaGVpZ2h0KTsKKyAgICBQVkdldEJ1ZmZlckRpbWVuc2lvbnMoJm1WaWRlb0RlY0NvbnRyb2xzLCAoaW50MzIgKikmYnVmX3dpZHRoLCAoaW50MzIgKikmYnVmX2hlaWdodCk7CiAKICAgICBDSEVDS19MRShkaXNwX3dpZHRoLCBidWZfd2lkdGgpOwogICAgIENIRUNLX0xFKGRpc3BfaGVpZ2h0LCBidWZfaGVpZ2h0KTsKQEAgLTQyNiwxMyArNDAwLDE0IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1Jc01wZWc0KSB7Ci0gICAgICAgICAgICBQVkNsZWFuVXBWaWRlb0RlY29kZXIobURlY0hhbmRsZSk7CisgICAgICAgICAgICBQVkNsZWFuVXBWaWRlb0RlY29kZXIoJm1WaWRlb0RlY0NvbnRyb2xzKTsKIAogICAgICAgICAgICAgdWludDhfdCAqdm9sX2RhdGFbMV17fTsKICAgICAgICAgICAgIGludDMyX3Qgdm9sX3NpemUgPSAwOwogCiAgICAgICAgICAgICBpZiAoIVBWSW5pdFZpZGVvRGVjb2RlcigKLSAgICAgICAgICAgICAgICAgICAgbURlY0hhbmRsZSwgdm9sX2RhdGEsICZ2b2xfc2l6ZSwgMSwgbUludGYtPmdldE1heFdpZHRoKCksIG1JbnRmLT5nZXRNYXhIZWlnaHQoKSwgSDI2M19NT0RFKSkgeworICAgICAgICAgICAgICAgICAgICAmbVZpZGVvRGVjQ29udHJvbHMsIHZvbF9kYXRhLCAmdm9sX3NpemUsIDEsIG1JbnRmLT5nZXRNYXhXaWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSW50Zi0+Z2V0TWF4SGVpZ2h0KCksIEgyNjNfTU9ERSkpIHsKICAgICAgICAgICAgICAgICBBTE9HRSgiRXJyb3IgaW4gUFZJbml0VmlkZW9EZWNvZGVyIEgyNjNfTU9ERSB3aGlsZSByZXNDaGFuZ2VkIHdhcyBzZXQgdG8gdHJ1ZSIpOwogICAgICAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CiAgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOwpAQCAtNTIyLDcgKzQ5Nyw3IEBACiAgICAgdWludDMyX3QgKnN0YXJ0X2NvZGUgPSAodWludDMyX3QgKiliaXRzdHJlYW07CiAgICAgYm9vbCB2b2xIZWFkZXIgPSAqc3RhcnRfY29kZSA9PSAweEIwMDEwMDAwOwogICAgIGlmICh2b2xIZWFkZXIpIHsKLSAgICAgICAgUFZDbGVhblVwVmlkZW9EZWNvZGVyKG1EZWNIYW5kbGUpOworICAgICAgICBQVkNsZWFuVXBWaWRlb0RlY29kZXIoJm1WaWRlb0RlY0NvbnRyb2xzKTsKICAgICAgICAgbUluaXRpYWxpemVkID0gZmFsc2U7CiAgICAgfQogCkBAIC01MzcsNyArNTEyLDcgQEAKICAgICAgICAgfQogICAgICAgICBNUDREZWNvZGluZ01vZGUgbW9kZSA9IChtSXNNcGVnNCkgPyBNUEVHNF9NT0RFIDogSDI2M19NT0RFOwogICAgICAgICBpZiAoIVBWSW5pdFZpZGVvRGVjb2RlcigKLSAgICAgICAgICAgICAgICBtRGVjSGFuZGxlLCB2b2xfZGF0YSwgJnZvbF9zaXplLCAxLAorICAgICAgICAgICAgICAgICZtVmlkZW9EZWNDb250cm9scywgdm9sX2RhdGEsICZ2b2xfc2l6ZSwgMSwKICAgICAgICAgICAgICAgICBtSW50Zi0+Z2V0TWF4V2lkdGgoKSwgbUludGYtPmdldE1heEhlaWdodCgpLCBtb2RlKSkgewogICAgICAgICAgICAgQUxPR0UoIlBWSW5pdFZpZGVvRGVjb2RlciBmYWlsZWQuIFVuc3VwcG9ydGVkIGNvbnRlbnQ/Iik7CiAgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOwpAQCAtNTQ1LDcgKzUyMCw3IEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbUluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgTVA0RGVjb2RpbmdNb2RlIGFjdHVhbE1vZGUgPSBQVkdldERlY0JpdHN0cmVhbU1vZGUobURlY0hhbmRsZSk7CisgICAgICAgIE1QNERlY29kaW5nTW9kZSBhY3R1YWxNb2RlID0gUFZHZXREZWNCaXRzdHJlYW1Nb2RlKCZtVmlkZW9EZWNDb250cm9scyk7CiAgICAgICAgIGlmIChtb2RlICE9IGFjdHVhbE1vZGUpIHsKICAgICAgICAgICAgIEFMT0dFKCJEZWNvZGVkIG1vZGUgbm90IHNhbWUgYXMgYWN0dWFsIG1vZGUgb2YgdGhlIGRlY29kZXIiKTsKICAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CkBAIC01NTMsNyArNTI4LDcgQEAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFBWU2V0UG9zdFByb2NUeXBlKG1EZWNIYW5kbGUsIDApOworICAgICAgICBQVlNldFBvc3RQcm9jVHlwZSgmbVZpZGVvRGVjQ29udHJvbHMsIDApOwogICAgICAgICBpZiAoaGFuZGxlUmVzQ2hhbmdlKHdvcmspKSB7CiAgICAgICAgICAgICBBTE9HSSgiU2V0dGluZyB3aWR0aCBhbmQgaGVpZ2h0Iik7CiAgICAgICAgICAgICBDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6b3V0cHV0IHNpemUoMHUsIG1XaWR0aCwgbUhlaWdodCk7CkBAIC01OTAsNyArNTY1LDcgQEAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHVpbnQzMl90IHlGcmFtZVNpemUgPSBzaXplb2YodWludDgpICogbURlY0hhbmRsZS0+c2l6ZTsKKyAgICAgICAgdWludDMyX3QgeUZyYW1lU2l6ZSA9IHNpemVvZih1aW50OCkgKiBtVmlkZW9EZWNDb250cm9scy5zaXplOwogICAgICAgICBpZiAobU91dHB1dEJ1ZmZlclNpemUgPCB5RnJhbWVTaXplICogMyAvIDIpewogICAgICAgICAgICAgQUxPR0UoIlRvbyBzbWFsbCBvdXRwdXQgYnVmZmVyOiAlenUgYnl0ZXMiLCBtT3V0cHV0QnVmZmVyU2l6ZSk7CiAgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOwpAQCAtNTk5LDcgKzU3NCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1GcmFtZXNDb25maWd1cmVkKSB7Ci0gICAgICAgICAgICBQVlNldFJlZmVyZW5jZVlVVihtRGVjSGFuZGxlLG1PdXRwdXRCdWZmZXJbMV0pOworICAgICAgICAgICAgUFZTZXRSZWZlcmVuY2VZVVYoJm1WaWRlb0RlY0NvbnRyb2xzLG1PdXRwdXRCdWZmZXJbMV0pOwogICAgICAgICAgICAgbUZyYW1lc0NvbmZpZ3VyZWQgPSB0cnVlOwogICAgICAgICB9CiAKQEAgLTYxMCw3ICs1ODUsNyBAQAogICAgICAgICB1aW50OF90ICpiaXRzdHJlYW1UbXAgPSBiaXRzdHJlYW07CiAgICAgICAgIHVpbnQzMl90IHRpbWVzdGFtcCA9IHdvcmtJbmRleDsKICAgICAgICAgaWYgKFBWRGVjb2RlVm9wSGVhZGVyKAotICAgICAgICAgICAgICAgICAgICBtRGVjSGFuZGxlLCAmYml0c3RyZWFtVG1wLCAmdGltZXN0YW1wLCAmdG1wSW5TaXplLAorICAgICAgICAgICAgICAgICAgICAmbVZpZGVvRGVjQ29udHJvbHMsICZiaXRzdHJlYW1UbXAsICZ0aW1lc3RhbXAsICZ0bXBJblNpemUsCiAgICAgICAgICAgICAgICAgICAgICZoZWFkZXJfaW5mbywgJnVzZUV4dFRpbWVzdGFtcCwKICAgICAgICAgICAgICAgICAgICAgbU91dHB1dEJ1ZmZlclttTnVtU2FtcGxlc091dHB1dCAmIDFdKSAhPSBQVl9UUlVFKSB7CiAgICAgICAgICAgICBBTE9HRSgiZmFpbGVkIHRvIGRlY29kZSB2b3AgaGVhZGVyLiIpOwpAQCAtNjQyLDcgKzYxNyw3IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChQVkRlY29kZVZvcEJvZHkobURlY0hhbmRsZSwgJnRtcEluU2l6ZSkgIT0gUFZfVFJVRSkgeworICAgICAgICBpZiAoUFZEZWNvZGVWb3BCb2R5KCZtVmlkZW9EZWNDb250cm9scywgJnRtcEluU2l6ZSkgIT0gUFZfVFJVRSkgewogICAgICAgICAgICAgQUxPR0UoImZhaWxlZCB0byBkZWNvZGUgdmlkZW8gZnJhbWUuIik7CiAgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9DMlNvZnRNcGVnNERlYy5oIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9DMlNvZnRNcGVnNERlYy5oCmluZGV4IDcxNmEwOTUuLmZlZDA0YzkgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wZWc0X2gyNjMvQzJTb2Z0TXBlZzREZWMuaAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnNF9oMjYzL0MyU29mdE1wZWc0RGVjLmgKQEAgLTE5LDggKzE5LDggQEAKIAogI2luY2x1ZGUgPFNpbXBsZUMyQ29tcG9uZW50Lmg+CiAKKyNpbmNsdWRlIDxtcDRkZWNfYXBpLmg+CiAKLXN0cnVjdCB0YWd2aWRlb0RlY0NvbnRyb2xzOwogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKQEAgLTU0LDcgKzU0LDcgQEAKICAgICBib29sIGhhbmRsZVJlc0NoYW5nZShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yayk7CiAKICAgICBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+IG1JbnRmOwotICAgIHRhZ3ZpZGVvRGVjQ29udHJvbHMgKm1EZWNIYW5kbGU7CisgICAgdGFndmlkZW9EZWNDb250cm9scyBtVmlkZW9EZWNDb250cm9sczsKICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQmxvY2s+IG1PdXRCbG9jazsKICAgICB1aW50OF90ICptT3V0cHV0QnVmZmVyW2tOdW1PdXRwdXRCdWZmZXJzXTsKICAgICBzaXplX3QgIG1PdXRwdXRCdWZmZXJTaXplOwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9DMlNvZnRNcGVnNEVuYy5jcHAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnNF9oMjYzL0MyU29mdE1wZWc0RW5jLmNwcAppbmRleCAzYzg3NTMxLi4zYmZlYzY2IDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnNF9oMjYzL0MyU29mdE1wZWc0RW5jLmNwcAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnNF9oMjYzL0MyU29mdE1wZWc0RW5jLmNwcApAQCAtNDM2LDE2ICs0MzYsMTggQEAKICAgICAgICAgfQogCiAgICAgICAgICsrbU51bUlucHV0RnJhbWVzOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJTdHJlYW1Jbml0RGF0YUluZm86Om91dHB1dD4gY3NkID0KLSAgICAgICAgICAgIEMyU3RyZWFtSW5pdERhdGFJbmZvOjpvdXRwdXQ6OkFsbG9jVW5pcXVlKG91dHB1dFNpemUsIDB1KTsKLSAgICAgICAgaWYgKCFjc2QpIHsKLSAgICAgICAgICAgIEFMT0dFKCJDU0QgYWxsb2NhdGlvbiBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9OT19NRU1PUlk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChvdXRwdXRTaXplKSB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJTdHJlYW1Jbml0RGF0YUluZm86Om91dHB1dD4gY3NkID0KKyAgICAgICAgICAgICAgICBDMlN0cmVhbUluaXREYXRhSW5mbzo6b3V0cHV0OjpBbGxvY1VuaXF1ZShvdXRwdXRTaXplLCAwdSk7CisgICAgICAgICAgICBpZiAoIWNzZCkgeworICAgICAgICAgICAgICAgIEFMT0dFKCJDU0QgYWxsb2NhdGlvbiBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX05PX01FTU9SWTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZW1jcHkoY3NkLT5tLnZhbHVlLCBvdXRQdHIsIG91dHB1dFNpemUpOworICAgICAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmNvbmZpZ1VwZGF0ZS5wdXNoX2JhY2soc3RkOjptb3ZlKGNzZCkpOwogICAgICAgICB9Ci0gICAgICAgIG1lbWNweShjc2QtPm0udmFsdWUsIG91dFB0ciwgb3V0cHV0U2l6ZSk7Ci0gICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUucHVzaF9iYWNrKHN0ZDo6bW92ZShjc2QpKTsKICAgICB9CiAKICAgICAvLyBoYW5kbGUgZHluYW1pYyBiaXRyYXRlIGNoYW5nZQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdnB4L0MyU29mdFZweERlYy5jcHAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnB4RGVjLmNwcAppbmRleCAyOTUzZDkwLi40NWUyY2E4IDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnB4RGVjLmNwcAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnB4RGVjLmNwcApAQCAtMTQ5LDggKzE0OSwxNiBAQAogI2Vsc2UKICAgICAgICAgYWRkUGFyYW1ldGVyKAogICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1Qcm9maWxlTGV2ZWwsIEMyX1BBUkFNS0VZX1BST0ZJTEVfTEVWRUwpCi0gICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86OmlucHV0KDB1LAotICAgICAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OlBST0ZJTEVfVU5VU0VELCBDMkNvbmZpZzo6TEVWRUxfVU5VU0VEKSkKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6aW5wdXQoMHUsCisgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6UFJPRklMRV9WUDhfMCwgQzJDb25maWc6OkxFVkVMX1VOVVNFRCkpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgICBDMkYobVByb2ZpbGVMZXZlbCwgcHJvZmlsZSkuZXF1YWxUbygKKyAgICAgICAgICAgICAgICAgICAgICAgIFBST0ZJTEVfVlA4XzAKKyAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Qcm9maWxlTGV2ZWwsIGxldmVsKS5lcXVhbFRvKAorICAgICAgICAgICAgICAgICAgICAgICAgTEVWRUxfVU5VU0VEKSwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFByb2ZpbGVMZXZlbFNldHRlciwgbVNpemUpCiAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZweC9DMlNvZnRWcHhFbmMuaCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZweC9DMlNvZnRWcHhFbmMuaAppbmRleCBjOThiODAyLi45MjZiMmU5IDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnB4RW5jLmgKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdnB4L0MyU29mdFZweEVuYy5oCkBAIC0zMjQsMjEgKzMyNCwzNSBAQAogICAgICAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJTdHJlYW1JbnRyYVJlZnJlc2hUdW5pbmc6Om91dHB1dCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHUsIEMyQ29uZmlnOjpJTlRSQV9SRUZSRVNIX0RJU0FCTEVELCAwLikpCiAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOwotCisjaWZkZWYgVlA5CiAgICAgICAgIGFkZFBhcmFtZXRlcigKLSAgICAgICAgRGVmaW5lUGFyYW0obVByb2ZpbGVMZXZlbCwgQzJfUEFSQU1LRVlfUFJPRklMRV9MRVZFTCkKLSAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86Om91dHB1dCgKLSAgICAgICAgICAgICAgICAwdSwgUFJPRklMRV9WUDlfMCwgTEVWRUxfVlA5XzRfMSkpCi0gICAgICAgIC53aXRoRmllbGRzKHsKLSAgICAgICAgICAgIEMyRihtUHJvZmlsZUxldmVsLCBwcm9maWxlKS5lcXVhbFRvKAotICAgICAgICAgICAgICAgIFBST0ZJTEVfVlA5XzAKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICBDMkYobVByb2ZpbGVMZXZlbCwgbGV2ZWwpLmVxdWFsVG8oCi0gICAgICAgICAgICAgICAgTEVWRUxfVlA5XzRfMSksCi0gICAgICAgIH0pCi0gICAgICAgIC53aXRoU2V0dGVyKFByb2ZpbGVMZXZlbFNldHRlcikKLSAgICAgICAgLmJ1aWxkKCkpOwotCisgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obVByb2ZpbGVMZXZlbCwgQzJfUEFSQU1LRVlfUFJPRklMRV9MRVZFTCkKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6b3V0cHV0KAorICAgICAgICAgICAgICAgICAgICAgICAgMHUsIFBST0ZJTEVfVlA5XzAsIExFVkVMX1ZQOV80XzEpKQorICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHsKKyAgICAgICAgICAgICAgICAgICAgQzJGKG1Qcm9maWxlTGV2ZWwsIHByb2ZpbGUpLmVxdWFsVG8oCisgICAgICAgICAgICAgICAgICAgICAgICBQUk9GSUxFX1ZQOV8wCisgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIEMyRihtUHJvZmlsZUxldmVsLCBsZXZlbCkuZXF1YWxUbygKKyAgICAgICAgICAgICAgICAgICAgICAgIExFVkVMX1ZQOV80XzEpLAorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoUHJvZmlsZUxldmVsU2V0dGVyKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKyNlbHNlCisgICAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtUHJvZmlsZUxldmVsLCBDMl9QQVJBTUtFWV9QUk9GSUxFX0xFVkVMKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1Qcm9maWxlTGV2ZWxJbmZvOjpvdXRwdXQoCisgICAgICAgICAgICAgICAgICAgICAgICAwdSwgUFJPRklMRV9WUDhfMCwgTEVWRUxfVU5VU0VEKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgICAgIEMyRihtUHJvZmlsZUxldmVsLCBwcm9maWxlKS5lcXVhbFRvKAorICAgICAgICAgICAgICAgICAgICAgICAgUFJPRklMRV9WUDhfMAorICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICBDMkYobVByb2ZpbGVMZXZlbCwgbGV2ZWwpLmVxdWFsVG8oCisgICAgICAgICAgICAgICAgICAgICAgICBMRVZFTF9VTlVTRUQpLAorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoUHJvZmlsZUxldmVsU2V0dGVyKQorICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKyNlbmRpZgogICAgICAgICBhZGRQYXJhbWV0ZXIoCiAgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obVJlcXVlc3RTeW5jLCBDMl9QQVJBTUtFWV9SRVFVRVNUX1NZTkNfRlJBTUUpCiAgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVJlcXVlc3RTeW5jRnJhbWVUdW5pbmc6Om91dHB1dCgwdSwgQzJfRkFMU0UpKQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2Z1enplci9DMkZ1enplci5jcHAgYi9tZWRpYS9jb2RlYzIvZnV6emVyL0MyRnV6emVyLmNwcAppbmRleCA1MWUxMDEzLi5lNDY5ZDhiIDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvZnV6emVyL0MyRnV6emVyLmNwcAorKysgYi9tZWRpYS9jb2RlYzIvZnV6emVyL0MyRnV6emVyLmNwcApAQCAtMTk0LDEyICsxOTQsMTIgQEAKICAgfQogCiAgIHN0ZDo6dmVjdG9yPEMyUGFyYW0qPiBjb25maWdQYXJhbXM7CisgIEMyU3RyZWFtUGljdHVyZVNpemVJbmZvOjppbnB1dCBpbnB1dFNpemUoMHUsIGtXaWR0aE9mVmlkZW8sIGtIZWlnaHRPZlZpZGVvKTsKKyAgQzJTdHJlYW1TYW1wbGVSYXRlSW5mbzo6b3V0cHV0IHNhbXBsZVJhdGVJbmZvKDB1LCBrU2FtcGxpbmdSYXRlT2ZBdWRpbyk7CisgIEMyU3RyZWFtQ2hhbm5lbENvdW50SW5mbzo6b3V0cHV0IGNoYW5uZWxDb3VudEluZm8oMHUsIGtDaGFubmVsc09mQXVkaW8pOwogICBpZiAoZG9tYWluLnZhbHVlID09IERPTUFJTl9WSURFTykgewotICAgIEMyU3RyZWFtUGljdHVyZVNpemVJbmZvOjppbnB1dCBpbnB1dFNpemUoMHUsIGtXaWR0aE9mVmlkZW8sIGtIZWlnaHRPZlZpZGVvKTsKICAgICBjb25maWdQYXJhbXMucHVzaF9iYWNrKCZpbnB1dFNpemUpOwogICB9IGVsc2UgaWYgKGRvbWFpbi52YWx1ZSA9PSBET01BSU5fQVVESU8pIHsKLSAgICBDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOjpvdXRwdXQgc2FtcGxlUmF0ZUluZm8oMHUsIGtTYW1wbGluZ1JhdGVPZkF1ZGlvKTsKLSAgICBDMlN0cmVhbUNoYW5uZWxDb3VudEluZm86Om91dHB1dCBjaGFubmVsQ291bnRJbmZvKDB1LCBrQ2hhbm5lbHNPZkF1ZGlvKTsKICAgICBjb25maWdQYXJhbXMucHVzaF9iYWNrKCZzYW1wbGVSYXRlSW5mbyk7CiAgICAgY29uZmlnUGFyYW1zLnB1c2hfYmFjaygmY2hhbm5lbENvdW50SW5mbyk7CiAgIH0KQEAgLTIzOSwxNyArMjM5LDE3IEBACiB9CiAKIHZvaWQgQ29kZWMyRnV6emVyOjpkZWNvZGVGcmFtZXMoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgbUJ1ZmZlclNvdXJjZSA9IG5ldyBCdWZmZXJTb3VyY2UoZGF0YSwgc2l6ZSk7Ci0gIGlmICghbUJ1ZmZlclNvdXJjZSkgeworICBzdGQ6OnVuaXF1ZV9wdHI8QnVmZmVyU291cmNlPiBidWZmZXJTb3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPEJ1ZmZlclNvdXJjZT4oZGF0YSwgc2l6ZSk7CisgIGlmICghYnVmZmVyU291cmNlKSB7CiAgICAgcmV0dXJuOwogICB9Ci0gIG1CdWZmZXJTb3VyY2UtPnBhcnNlKCk7CisgIGJ1ZmZlclNvdXJjZS0+cGFyc2UoKTsKICAgYzJfc3RhdHVzX3Qgc3RhdHVzID0gQzJfT0s7CiAgIHNpemVfdCBudW1GcmFtZXMgPSAwOwotICB3aGlsZSAoIW1CdWZmZXJTb3VyY2UtPmlzRW9zKCkpIHsKKyAgd2hpbGUgKCFidWZmZXJTb3VyY2UtPmlzRW9zKCkpIHsKICAgICB1aW50OF90KiBmcmFtZSA9IG51bGxwdHI7CiAgICAgc2l6ZV90IGZyYW1lU2l6ZSA9IDA7Ci0gICAgRnJhbWVEYXRhIGZyYW1lRGF0YSA9IG1CdWZmZXJTb3VyY2UtPmdldEZyYW1lKCk7CisgICAgRnJhbWVEYXRhIGZyYW1lRGF0YSA9IGJ1ZmZlclNvdXJjZS0+Z2V0RnJhbWUoKTsKICAgICBmcmFtZSA9IHN0ZDo6Z2V0PDA+KGZyYW1lRGF0YSk7CiAgICAgZnJhbWVTaXplID0gc3RkOjpnZXQ8MT4oZnJhbWVEYXRhKTsKIApAQCAtMjk4LDcgKzI5OCw2IEBACiAgIG1Db25kaXRpb25hbFZhcmlhYmxlLndhaXRfZm9yKHdhaXRGb3JEZWNvZGVDb21wbGV0ZSwga0MyRnV6emVyVGltZU91dCwgW3RoaXNdIHsgcmV0dXJuIG1Fb3M7IH0pOwogICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+IGMyZmx1c2hlZFdvcmtzOwogICBtQ29tcG9uZW50LT5mbHVzaF9zbShDMkNvbXBvbmVudDo6RkxVU0hfQ09NUE9ORU5ULCAmYzJmbHVzaGVkV29ya3MpOwotICBkZWxldGUgbUJ1ZmZlclNvdXJjZTsKIH0KIAogZXh0ZXJuICJDIiBpbnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2Z1enplci9DMkZ1enplci5oIGIvbWVkaWEvY29kZWMyL2Z1enplci9DMkZ1enplci5oCmluZGV4IGQ1YWM4MWEuLmRhNzY4ODUgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9mdXp6ZXIvQzJGdXp6ZXIuaAorKysgYi9tZWRpYS9jb2RlYzIvZnV6emVyL0MyRnV6emVyLmgKQEAgLTEwNCw3ICsxMDQsNiBAQAogICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtNYXJrZXJTdWZmaXhTaXplID0gMzsKICAgfTsKIAotICBCdWZmZXJTb3VyY2UqIG1CdWZmZXJTb3VyY2U7CiAgIGJvb2wgbUVvcyA9IGZhbHNlOwogICBDMkJsb2NrUG9vbDo6bG9jYWxfaWRfdCBtQmxvY2tQb29sSWQ7CiAKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvLmNsYW5nLWZvcm1hdCBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvLmNsYW5nLWZvcm1hdApkZWxldGVkIGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMTM2Mjc5Yy4uMDAwMDAwMAotLS0gYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzLy5jbGFuZy1mb3JtYXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uLi8uLi8uLi8uLi8uLi8uLi8uLi9idWlsZC9zb29uZy9zY3JpcHRzL3N5c3RlbS1jbGFuZy1mb3JtYXQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL2Z1bmN0aW9uYWwvYXVkaW8vVnRzSGFsTWVkaWFDMlYxXzBUYXJnZXRBdWRpb0RlY1Rlc3QuY3BwIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9mdW5jdGlvbmFsL2F1ZGlvL1Z0c0hhbE1lZGlhQzJWMV8wVGFyZ2V0QXVkaW9EZWNUZXN0LmNwcAppbmRleCA5ZTNhODIzLi5kNDdlZjY3IDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL2Z1bmN0aW9uYWwvYXVkaW8vVnRzSGFsTWVkaWFDMlYxXzBUYXJnZXRBdWRpb0RlY1Rlc3QuY3BwCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvZnVuY3Rpb25hbC9hdWRpby9WdHNIYWxNZWRpYUMyVjFfMFRhcmdldEF1ZGlvRGVjVGVzdC5jcHAKQEAgLTQ2NSw2ICs0NjUsMTEgQEAKICAgICBpZiAobU1pbWUuZmluZCgicmF3IikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICAgICAgYml0U3RyZWFtSW5mb1swXSA9IDgwMDA7CiAgICAgICAgIGJpdFN0cmVhbUluZm9bMV0gPSAxOworICAgIH0gZWxzZSBpZiAoKG1NaW1lLmZpbmQoImc3MTEtYWxhdyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB8fAorICAgICAgICAgICAgICAgKG1NaW1lLmZpbmQoImc3MTEtbWxhdyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSkgeworICAgICAgICAvLyBnNzExIHRlc3QgZGF0YSBpcyBhbGwgMS1jaGFubmVsIGFuZCBoYXMgbm8gZW1iZWRkZWQgY29uZmlnIGluZm8uCisgICAgICAgIGJpdFN0cmVhbUluZm9bMF0gPSA4MDAwOworICAgICAgICBiaXRTdHJlYW1JbmZvWzFdID0gMTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRShnZXRJbnB1dENoYW5uZWxJbmZvKG1Db21wb25lbnQsIG1NaW1lLCBiaXRTdHJlYW1JbmZvKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9mdW5jdGlvbmFsL2NvbXBvbmVudC9WdHNIYWxNZWRpYUMyVjFfMFRhcmdldENvbXBvbmVudFRlc3QuY3BwIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9mdW5jdGlvbmFsL2NvbXBvbmVudC9WdHNIYWxNZWRpYUMyVjFfMFRhcmdldENvbXBvbmVudFRlc3QuY3BwCmluZGV4IGZmZWM4OTcuLjI3NWE3MjEgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvZnVuY3Rpb25hbC9jb21wb25lbnQvVnRzSGFsTWVkaWFDMlYxXzBUYXJnZXRDb21wb25lbnRUZXN0LmNwcAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL2Z1bmN0aW9uYWwvY29tcG9uZW50L1Z0c0hhbE1lZGlhQzJWMV8wVGFyZ2V0Q29tcG9uZW50VGVzdC5jcHAKQEAgLTYxLDYgKzYxLDcgQEAKICAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpIG92ZXJyaWRlIHsKICAgICAgICAgZ2V0UGFyYW1zKCk7CisgICAgICAgIG1EaXNhYmxlVGVzdCA9IGZhbHNlOwogICAgICAgICBtRW9zID0gZmFsc2U7CiAgICAgICAgIG1DbGllbnQgPSBhbmRyb2lkOjpDb2RlYzJDbGllbnQ6OkNyZWF0ZUZyb21TZXJ2aWNlKG1JbnN0YW5jZU5hbWUuY19zdHIoKSk7CiAgICAgICAgIEFTU0VSVF9ORShtQ2xpZW50LCBudWxscHRyKTsKQEAgLTczLDYgKzc0LDE0IEBACiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX0lOUFVUX0JVRkZFUlM7ICsraSkgewogICAgICAgICAgICAgbVdvcmtRdWV1ZS5lbXBsYWNlX2JhY2sobmV3IEMyV29yayk7CiAgICAgICAgIH0KKworICAgICAgICBDMlNlY3VyZU1vZGVUdW5pbmcgc2VjdXJlTW9kZVR1bmluZ3t9OworICAgICAgICBtQ29tcG9uZW50LT5xdWVyeSh7JnNlY3VyZU1vZGVUdW5pbmd9LCB7fSwgQzJfTUFZX0JMT0NLLCBudWxscHRyKTsKKyAgICAgICAgaWYgKHNlY3VyZU1vZGVUdW5pbmcudmFsdWUgIT0gQzJDb25maWc6OlNNX1VOUFJPVEVDVEVEKSB7CisgICAgICAgICAgICBtRGlzYWJsZVRlc3QgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1EaXNhYmxlVGVzdCkgc3RkOjpjb3V0IDw8ICJbICAgV0FSTiAgIF0gVGVzdCBEaXNhYmxlZCBcbiI7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkgb3ZlcnJpZGUgewpAQCAtMTA1LDYgKzExNCw3IEBACiAgICAgc3RkOjpzdHJpbmcgbUluc3RhbmNlTmFtZTsKICAgICBzdGQ6OnN0cmluZyBtQ29tcG9uZW50TmFtZTsKICAgICBib29sIG1Fb3M7CisgICAgYm9vbCBtRGlzYWJsZVRlc3Q7CiAgICAgc3RkOjptdXRleCBtUXVldWVMb2NrOwogICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIG1RdWV1ZUNvbmRpdGlvbjsKICAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+IG1Xb3JrUXVldWU7CkBAIC0zMjQsNiArMzM0LDcgQEAKIH07CiAKIFRFU1RfUChDb2RlYzJDb21wb25lbnRJbnB1dFRlc3RzLCBJbnB1dEJ1ZmZlclRlc3QpIHsKKyAgICBpZiAobURpc2FibGVUZXN0KSBHVEVTVF9TS0lQKCkgPDwgIlRlc3QgaXMgZGlzYWJsZWQiOwogICAgIGRlc2NyaXB0aW9uKCJUZXN0cyBmb3IgZGlmZmVyZW50IGlucHV0cyIpOwogCiAgICAgdWludDMyX3QgZmxhZ3MgPSBzdGQ6OmdldDwyPihHZXRQYXJhbSgpKTsKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsL3NlcnZpY2VzL0FuZHJvaWQuYnAgYi9tZWRpYS9jb2RlYzIvaGlkbC9zZXJ2aWNlcy9BbmRyb2lkLmJwCmluZGV4IGJiOWY1MWYuLmIzNmU4MGEgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9oaWRsL3NlcnZpY2VzL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvc2VydmljZXMvQW5kcm9pZC5icApAQCAtNTIsNyArNTIsNyBAQAogCiAgICAgLy8gbWluaWphaWwgaXMgdXNlZCB0byBwcm90ZWN0IGFnYWluc3QgdW5leHBlY3RlZCBzeXN0ZW0gY2FsbHMuCiAgICAgc2hhcmVkX2xpYnM6IFsKLSAgICAgICAgImxpYmF2c2VydmljZXNfbWluaWphaWxfdmVuZG9yIiwKKyAgICAgICAgImxpYmF2c2VydmljZXNfbWluaWphaWwiLAogICAgICAgICAibGliYmluZGVyIiwKICAgICBdLAogICAgIHJlcXVpcmVkOiBbImFuZHJvaWQuaGFyZHdhcmUubWVkaWEuYzJAMS4yLWRlZmF1bHQtc2VjY29tcF9wb2xpY3kiXSwKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWMuY3BwIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlYy5jcHAKaW5kZXggODI0NjBjOS4uNDRhMmM1YiAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlYy5jcHAKKysrIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlYy5jcHAKQEAgLTEzMzIsOCArMTMzMiw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICAvLyBzZXQgY2hhbm5lbC1tYXNrCiAgICAgICAgIGlmIChjb25maWctPm1Eb21haW4gJiBDb25maWc6OklTX0FVRElPKSB7CisgICAgICAgICAgICAvLyBzZXQgY2hhbm5lbC1tYXNrCiAgICAgICAgICAgICBpbnQzMl90IG1hc2s7CiAgICAgICAgICAgICBpZiAobXNnLT5maW5kSW50MzIoS0VZX0NIQU5ORUxfTUFTSywgJm1hc2spKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy0+bURvbWFpbiAmIENvbmZpZzo6SVNfRU5DT0RFUikgewpAQCAtMTM0Miw2ICsxMzQyLDE1IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+bU91dHB1dEZvcm1hdC0+c2V0SW50MzIoS0VZX0NIQU5ORUxfTUFTSywgbWFzayk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBzZXQgUENNIGVuY29kaW5nCisgICAgICAgICAgICBpbnQzMl90IHBjbUVuY29kaW5nID0ga0F1ZGlvRW5jb2RpbmdQY20xNmJpdDsKKyAgICAgICAgICAgIG1zZy0+ZmluZEludDMyKEtFWV9QQ01fRU5DT0RJTkcsICZwY21FbmNvZGluZyk7CisgICAgICAgICAgICBpZiAoZW5jb2RlcikgeworICAgICAgICAgICAgICAgIGNvbmZpZy0+bUlucHV0Rm9ybWF0LT5zZXRJbnQzMigiYW5kcm9pZC5fY29uZmlnLXBjbS1lbmNvZGluZyIsIHBjbUVuY29kaW5nKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29uZmlnLT5tT3V0cHV0Rm9ybWF0LT5zZXRJbnQzMigiYW5kcm9pZC5fY29uZmlnLXBjbS1lbmNvZGluZyIsIHBjbUVuY29kaW5nKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPiBjb2xvclRyYW5zZmVyUmVxdWVzdFBhcmFtOwpAQCAtMTQyMSw2ICsxNDMwLDEwIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoY29uZmlnLT5tVHVubmVsZWQpIHsKKyAgICAgICAgICAgIGNvbmZpZy0+bU91dHB1dEZvcm1hdC0+c2V0SW50MzIoImFuZHJvaWQuX3R1bm5lbGVkIiwgMSk7CisgICAgICAgIH0KKwogICAgICAgICBBTE9HRCgic2V0dXAgZm9ybWF0cyBpbnB1dDogJXMiLAogICAgICAgICAgICAgICAgIGNvbmZpZy0+bUlucHV0Rm9ybWF0LT5kZWJ1Z1N0cmluZygpLmNfc3RyKCkpOwogICAgICAgICBBTE9HRCgic2V0dXAgZm9ybWF0cyBvdXRwdXQ6ICVzIiwKQEAgLTE4OTYsOSArMTkwOSwxMSBAQAogICAgIHsKICAgICAgICAgTXV0ZXhlZDxzdGQ6OnVuaXF1ZV9wdHI8Q29uZmlnPj46OkxvY2tlZCBjb25maWdMb2NrZWQobUNvbmZpZyk7CiAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDb25maWc+ICZjb25maWcgPSAqY29uZmlnTG9ja2VkOworICAgICAgICBzcDxBTmF0aXZlV2luZG93PiBuYXRpdmVXaW5kb3cgPSBzdGF0aWNfY2FzdDxBTmF0aXZlV2luZG93ICo+KHN1cmZhY2UuZ2V0KCkpOworICAgICAgICBzdGF0dXNfdCBlcnIgPSBPSzsKKwogICAgICAgICBpZiAoY29uZmlnLT5tVHVubmVsZWQgJiYgY29uZmlnLT5tU2lkZWJhbmRIYW5kbGUgIT0gbnVsbHB0cikgewotICAgICAgICAgICAgc3A8QU5hdGl2ZVdpbmRvdz4gbmF0aXZlV2luZG93ID0gc3RhdGljX2Nhc3Q8QU5hdGl2ZVdpbmRvdyAqPihzdXJmYWNlLmdldCgpKTsKLSAgICAgICAgICAgIHN0YXR1c190IGVyciA9IG5hdGl2ZV93aW5kb3dfc2V0X3NpZGViYW5kX3N0cmVhbSgKKyAgICAgICAgICAgIGVyciA9IG5hdGl2ZV93aW5kb3dfc2V0X3NpZGViYW5kX3N0cmVhbSgKICAgICAgICAgICAgICAgICAgICAgbmF0aXZlV2luZG93LmdldCgpLAogICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PG5hdGl2ZV9oYW5kbGVfdCAqPihjb25maWctPm1TaWRlYmFuZEhhbmRsZS0+aGFuZGxlKCkpKTsKICAgICAgICAgICAgIGlmIChlcnIgIT0gT0spIHsKQEAgLTE5MDYsNiArMTkyMSwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlV2luZG93LmdldCgpLCBjb25maWctPm1TaWRlYmFuZEhhbmRsZS0+aGFuZGxlKCksIGVycik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEV4cGxpY2l0bHkgcmVzZXQgdGhlIHNpZGViYW5kIGhhbmRsZSBvZiB0aGUgd2luZG93IGZvcgorICAgICAgICAgICAgLy8gbm9uLXR1bm5lbGVkIHZpZGVvIGluIGNhc2UgdGhlIHdpbmRvdyB3YXMgcHJldmlvdXNseSB1c2VkCisgICAgICAgICAgICAvLyBmb3IgYSB0dW5uZWxlZCB2aWRlbyBwbGF5YmFjay4KKyAgICAgICAgICAgIGVyciA9IG5hdGl2ZV93aW5kb3dfc2V0X3NpZGViYW5kX3N0cmVhbShuYXRpdmVXaW5kb3cuZ2V0KCksIG51bGxwdHIpOworICAgICAgICAgICAgaWYgKGVyciAhPSBPSykgeworICAgICAgICAgICAgICAgIEFMT0dFKCJuYXRpdmVfd2luZG93X3NldF9zaWRlYmFuZF9zdHJlYW0obnVsbHB0cikgZmFpbGVkISAoZXJyICVkKS4iLCBlcnIpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG1DaGFubmVsLT5zZXRTdXJmYWNlKHN1cmZhY2UpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlY0J1ZmZlckNoYW5uZWwuY3BwIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlY0J1ZmZlckNoYW5uZWwuY3BwCmluZGV4IDMwNzM5NmIuLjIzYTMyNmYgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWNCdWZmZXJDaGFubmVsLmNwcAorKysgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjQnVmZmVyQ2hhbm5lbC5jcHAKQEAgLTI1NCw3ICsyNTQsNyBAQAogICAgICAgICAgICAgICAgIGJvb2wgcmVsZWFzZWQgPSBpbnB1dC0+YnVmZmVycy0+cmVsZWFzZUJ1ZmZlcihidWZmZXIsIG51bGxwdHIsIHRydWUpOwogICAgICAgICAgICAgICAgIEFMT0dWKCJbJXNdIHF1ZXVlSW5wdXRCdWZmZXI6IGJ1ZmZlciBjb3BpZWQ7ICVzcmVsZWFzZWQiLAogICAgICAgICAgICAgICAgICAgICAgIG1OYW1lLCByZWxlYXNlZCA/ICIiIDogIm5vdCAiKTsKLSAgICAgICAgICAgICAgICBidWZmZXIuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBidWZmZXIgPSBjb3B5OwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBTE9HVygiWyVzXSBxdWV1ZUlucHV0QnVmZmVyOiBmYWlsZWQgdG8gY29weSBhIGJ1ZmZlcjsgdGhpcyBtYXkgY2F1c2UgaW5wdXQgIgogICAgICAgICAgICAgICAgICAgICAgICJidWZmZXIgc3RhcnZhdGlvbiBvbiBjb21wb25lbnQuIiwgbU5hbWUpOwpAQCAtMjgyLDYgKzI4MiwxMiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChlb3MpIHsKKyAgICAgICAgTXV0ZXhlZDxJbnB1dD46OkxvY2tlZCBpbnB1dChtSW5wdXQpOworICAgICAgICBpZiAoaW5wdXQtPmZyYW1lUmVhc3NlbWJsZXIpIHsKKyAgICAgICAgICAgIHVzZXNGcmFtZVJlYXNzZW1ibGVyID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIGRyYWluIGFueSBwZW5kaW5nIGl0ZW1zIHdpdGggZW9zCisgICAgICAgICAgICBpbnB1dC0+ZnJhbWVSZWFzc2VtYmxlci5wcm9jZXNzKGJ1ZmZlciwgJml0ZW1zKTsKKyAgICAgICAgfQogICAgICAgICBmbGFncyB8PSBDMkZyYW1lRGF0YTo6RkxBR19FTkRfT0ZfU1RSRUFNOwogICAgIH0KICAgICBpZiAodXNlc0ZyYW1lUmVhc3NlbWJsZXIpIHsKQEAgLTM0MSwxMCArMzQ3LDEwIEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgTXV0ZXhlZDxJbnB1dD46OkxvY2tlZCBpbnB1dChtSW5wdXQpOwogICAgICAgICBib29sIHJlbGVhc2VkID0gZmFsc2U7Ci0gICAgICAgIGlmIChidWZmZXIpIHsKLSAgICAgICAgICAgIHJlbGVhc2VkID0gaW5wdXQtPmJ1ZmZlcnMtPnJlbGVhc2VCdWZmZXIoYnVmZmVyLCBudWxscHRyLCB0cnVlKTsKLSAgICAgICAgfSBlbHNlIGlmIChjb3B5KSB7CisgICAgICAgIGlmIChjb3B5KSB7CiAgICAgICAgICAgICByZWxlYXNlZCA9IGlucHV0LT5leHRyYUJ1ZmZlcnMucmVsZWFzZVNsb3QoY29weSwgbnVsbHB0ciwgdHJ1ZSk7CisgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyKSB7CisgICAgICAgICAgICByZWxlYXNlZCA9IGlucHV0LT5idWZmZXJzLT5yZWxlYXNlQnVmZmVyKGJ1ZmZlciwgbnVsbHB0ciwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICAgICAgQUxPR1YoIlslc10gcXVldWVJbnB1dEJ1ZmZlcjogYnVmZmVyJXMgJXNyZWxlYXNlZCIsCiAgICAgICAgICAgICAgIG1OYW1lLCAoYnVmZmVyID09IG51bGxwdHIpID8gIihjb3B5KSIgOiAiIiwgcmVsZWFzZWQgPyAiIiA6ICJub3QgIik7CkBAIC0xMzgyLDYgKzEzODgsMTIgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICBpbnQzMl90IHR1bm5lbGVkID0gMDsKKyAgICAgICAgaWYgKCFvdXRwdXRGb3JtYXQtPmZpbmRJbnQzMigiYW5kcm9pZC5fdHVubmVsZWQiLCAmdHVubmVsZWQpKSB7CisgICAgICAgICAgICB0dW5uZWxlZCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgbVR1bm5lbGVkID0gKHR1bm5lbGVkICE9IDApOwogICAgIH0KIAogICAgIC8vIFNldCB1cCBwaXBlbGluZSBjb250cm9sLiBUaGlzIGhhcyB0byBiZSBkb25lIGFmdGVyIG1JbnB1dEJ1ZmZlcnMgYW5kCkBAIC0xODkxLDEwICsxOTAzLDIxIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBib29sIGRyb3AgPSBmYWxzZTsKKyAgICBpZiAod29ya2xldC0+b3V0cHV0LmZsYWdzICYgQzJGcmFtZURhdGE6OkZMQUdfRFJPUF9GUkFNRSkgeworICAgICAgICBBTE9HVigiWyVzXSBvbldvcmtEb25lOiBkcm9wIGJ1ZmZlciBidXQga2VlcCBtZXRhZGF0YSIsIG1OYW1lKTsKKyAgICAgICAgZHJvcCA9IHRydWU7CisgICAgfQorCiAgICAgaWYgKG5vdGlmeUNsaWVudCAmJiAhYnVmZmVyICYmICFmbGFncykgewotICAgICAgICBBTE9HVigiWyVzXSBvbldvcmtEb25lOiBOb3QgcmVwb3J0aW5nIG91dHB1dCBidWZmZXIgKCVsbGQpIiwKLSAgICAgICAgICAgICAgbU5hbWUsIHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdWxsKCkpOwotICAgICAgICBub3RpZnlDbGllbnQgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1UdW5uZWxlZCAmJiBkcm9wICYmIG91dHB1dEZvcm1hdCkgeworICAgICAgICAgICAgQUxPR1YoIlslc10gb25Xb3JrRG9uZTogS2VlcCB0dW5uZWxlZCwgZHJvcCBmcmFtZSB3aXRoIGZvcm1hdCBjaGFuZ2UgKCVsbGQpIiwKKyAgICAgICAgICAgICAgICAgIG1OYW1lLCB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXgucGVla3VsbCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFMT0dWKCJbJXNdIG9uV29ya0RvbmU6IE5vdCByZXBvcnRpbmcgb3V0cHV0IGJ1ZmZlciAoJWxsZCkiLAorICAgICAgICAgICAgICAgICAgbU5hbWUsIHdvcmstPmlucHV0Lm9yZGluYWwuZnJhbWVJbmRleC5wZWVrdWxsKCkpOworICAgICAgICAgICAgbm90aWZ5Q2xpZW50ID0gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoYnVmZmVyKSB7CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjQnVmZmVyQ2hhbm5lbC5oIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlY0J1ZmZlckNoYW5uZWwuaAppbmRleCA0ZGI2OWNiLi4yNmVlZjMwIDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjQnVmZmVyQ2hhbm5lbC5oCisrKyBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWNCdWZmZXJDaGFubmVsLmgKQEAgLTMyNCw2ICszMjQsOCBAQAogICAgICAgICByZXR1cm4gbUNyeXB0byAhPSBudWxscHRyIHx8IG1EZXNjcmFtYmxlciAhPSBudWxscHRyOwogICAgIH0KICAgICBzdGQ6OmF0b21pY19ib29sIG1TZW5kRW5jcnlwdGVkSW5mb0J1ZmZlcjsKKworICAgIHN0ZDo6YXRvbWljX2Jvb2wgbVR1bm5lbGVkOwogfTsKIAogLy8gQ29udmVyc2lvbiBvZiBhIGMyX3N0YXR1c190IHZhbHVlIHRvIGEgc3RhdHVzX3QgdmFsdWUgbWF5IGRlcGVuZCBvbiB0aGUKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWNCdWZmZXJzLmNwcCBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWNCdWZmZXJzLmNwcAppbmRleCAzMzNhMmNhLi45N2UxYTAxIDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjQnVmZmVycy5jcHAKKysrIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlY0J1ZmZlcnMuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8QzJQbGF0Zm9ybVN1cHBvcnQuaD4KIAogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQURlYnVnLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9NZWRpYURlZnMuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUNvZGVjLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFDb2RlY0NvbnN0YW50cy5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L1NraXBDdXRCdWZmZXIuaD4KQEAgLTEzMiw2ICsxMzMsNyBAQAogICAgIGlmICghY29weS0+Y29weShjMmJ1ZmZlcikpIHsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQorICAgIGNvcHktPm1ldGEoKS0+ZXh0ZW5kKGJ1ZmZlci0+bWV0YSgpKTsKICAgICByZXR1cm4gY29weTsKIH0KIApAQCAtMTk5LDYgKzIwMSw1NiBAQAogICAgIG1Ta2lwQ3V0QnVmZmVyID0gbmV3IFNraXBDdXRCdWZmZXIoc2tpcCwgY3V0LCBtQ2hhbm5lbENvdW50KTsKIH0KIAorYm9vbCBPdXRwdXRCdWZmZXJzOjpjb252ZXJ0KAorICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZzcmMsIHNwPENvZGVjMkJ1ZmZlcj4gKmRzdCkgeworICAgIGlmICghc3JjIHx8IHNyYy0+ZGF0YSgpLnR5cGUoKSAhPSBDMkJ1ZmZlckRhdGE6OkxJTkVBUikgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGludDMyX3QgY29uZmlnRW5jb2RpbmcgPSBrQXVkaW9FbmNvZGluZ1BjbTE2Yml0OworICAgIGludDMyX3QgY29kZWNFbmNvZGluZyA9IGtBdWRpb0VuY29kaW5nUGNtMTZiaXQ7CisgICAgaWYgKG1Gb3JtYXQtPmZpbmRJbnQzMigiYW5kcm9pZC5fY29kZWMtcGNtLWVuY29kaW5nIiwgJmNvZGVjRW5jb2RpbmcpCisgICAgICAgICAgICAmJiBtRm9ybWF0LT5maW5kSW50MzIoImFuZHJvaWQuX2NvbmZpZy1wY20tZW5jb2RpbmciLCAmY29uZmlnRW5jb2RpbmcpKSB7CisgICAgICAgIGlmIChtU3JjRW5jb2RpbmcgIT0gY29kZWNFbmNvZGluZyB8fCBtRHN0RW5jb2RpbmcgIT0gY29uZmlnRW5jb2RpbmcpIHsKKyAgICAgICAgICAgIGlmIChjb2RlY0VuY29kaW5nICE9IGNvbmZpZ0VuY29kaW5nKSB7CisgICAgICAgICAgICAgICAgbURhdGFDb252ZXJ0ZXIgPSBBdWRpb0NvbnZlcnRlcjo6Q3JlYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgKEF1ZGlvRW5jb2RpbmcpY29kZWNFbmNvZGluZywgKEF1ZGlvRW5jb2RpbmcpY29uZmlnRW5jb2RpbmcpOworICAgICAgICAgICAgICAgIEFMT0dEX0lGKG1EYXRhQ29udmVydGVyLCAiWyVzXSBDb252ZXJ0ZXIgY3JlYXRlZCBmcm9tICVkIHRvICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtTmFtZSwgY29kZWNFbmNvZGluZywgY29uZmlnRW5jb2RpbmcpOworICAgICAgICAgICAgICAgIG1Gb3JtYXRXaXRoQ29udmVydGVyID0gbUZvcm1hdC0+ZHVwKCk7CisgICAgICAgICAgICAgICAgbUZvcm1hdFdpdGhDb252ZXJ0ZXItPnNldEludDMyKEtFWV9QQ01fRU5DT0RJTkcsIGNvbmZpZ0VuY29kaW5nKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbURhdGFDb252ZXJ0ZXIgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1Gb3JtYXRXaXRoQ29udmVydGVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1TcmNFbmNvZGluZyA9IGNvZGVjRW5jb2Rpbmc7CisgICAgICAgICAgICBtRHN0RW5jb2RpbmcgPSBjb25maWdFbmNvZGluZzsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW50IGVuY29kaW5nOyAhbUZvcm1hdC0+ZmluZEludDMyKEtFWV9QQ01fRU5DT0RJTkcsICZlbmNvZGluZykKKyAgICAgICAgICAgICAgICB8fCBlbmNvZGluZyAhPSBtRHN0RW5jb2RpbmcpIHsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIW1EYXRhQ29udmVydGVyKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gc3JjQnVmZmVyID0gQ29uc3RMaW5lYXJCbG9ja0J1ZmZlcjo6QWxsb2NhdGUobUZvcm1hdCwgc3JjKTsKKyAgICBpZiAoIXNyY0J1ZmZlcikgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghKmRzdCkgeworICAgICAgICAqZHN0ID0gbmV3IENvZGVjMkJ1ZmZlcigKKyAgICAgICAgICAgICAgICBtRm9ybWF0LAorICAgICAgICAgICAgICAgIG5ldyBBQnVmZmVyKG1EYXRhQ29udmVydGVyLT50YXJnZXRTaXplKHNyY0J1ZmZlci0+c2l6ZSgpKSkpOworICAgIH0KKyAgICBzcDxNZWRpYUNvZGVjQnVmZmVyPiBkc3RCdWZmZXIgPSAqZHN0OworICAgIHN0YXR1c190IGVyciA9IG1EYXRhQ29udmVydGVyLT5jb252ZXJ0KHNyY0J1ZmZlciwgZHN0QnVmZmVyKTsKKyAgICBpZiAoZXJyICE9IE9LKSB7CisgICAgICAgIEFMT0dEKCJbJXNdIGJ1ZmZlciBjb252ZXJzaW9uIGZhaWxlZDogJWQiLCBtTmFtZSwgZXJyKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBkc3RCdWZmZXItPnNldEZvcm1hdChtRm9ybWF0V2l0aENvbnZlcnRlcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgT3V0cHV0QnVmZmVyczo6Y2xlYXJTdGFzaCgpIHsKICAgICBtUGVuZGluZy5jbGVhcigpOwogICAgIG1SZW9yZGVyU3Rhc2guY2xlYXIoKTsKQEAgLTEwNzgsNyArMTEzMCw3IEBACiAgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQogICAgIGMyQnVmZmVyLT5zZXRGb3JtYXQobUZvcm1hdCk7Ci0gICAgaWYgKCFjMkJ1ZmZlci0+Y29weShidWZmZXIpKSB7CisgICAgaWYgKCFjb252ZXJ0KGJ1ZmZlciwgJmMyQnVmZmVyKSAmJiAhYzJCdWZmZXItPmNvcHkoYnVmZmVyKSkgewogICAgICAgICBBTE9HRCgiWyVzXSBjb3B5IGJ1ZmZlciBmYWlsZWQiLCBtTmFtZSk7CiAgICAgICAgIHJldHVybiBXT1VMRF9CTE9DSzsKICAgICB9CkBAIC0xMTk0LDkgKzEyNDYsMTIgQEAKICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAmYnVmZmVyLAogICAgICAgICBzaXplX3QgKmluZGV4LAogICAgICAgICBzcDxNZWRpYUNvZGVjQnVmZmVyPiAqY2xpZW50QnVmZmVyKSB7Ci0gICAgc3A8Q29kZWMyQnVmZmVyPiBuZXdCdWZmZXIgPSB3cmFwKGJ1ZmZlcik7Ci0gICAgaWYgKG5ld0J1ZmZlciA9PSBudWxscHRyKSB7Ci0gICAgICAgIHJldHVybiBOT19NRU1PUlk7CisgICAgc3A8Q29kZWMyQnVmZmVyPiBuZXdCdWZmZXI7CisgICAgaWYgKCFjb252ZXJ0KGJ1ZmZlciwgJm5ld0J1ZmZlcikpIHsKKyAgICAgICAgbmV3QnVmZmVyID0gd3JhcChidWZmZXIpOworICAgICAgICBpZiAobmV3QnVmZmVyID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIHJldHVybiBOT19NRU1PUlk7CisgICAgICAgIH0KICAgICB9CiAgICAgbmV3QnVmZmVyLT5zZXRGb3JtYXQobUZvcm1hdCk7CiAgICAgKmluZGV4ID0gbUltcGwuYXNzaWduU2xvdChuZXdCdWZmZXIpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlY0J1ZmZlcnMuaCBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWNCdWZmZXJzLmgKaW5kZXggOTk1ZDNhNC4uYzhlOTkzMCAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlY0J1ZmZlcnMuaAorKysgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjQnVmZmVycy5oCkBAIC0xOCw5ICsxOCwxMSBAQAogCiAjZGVmaW5lIENDT0RFQ19CVUZGRVJTX0hfCiAKKyNpbmNsdWRlIDxvcHRpb25hbD4KICNpbmNsdWRlIDxzdHJpbmc+CiAKICNpbmNsdWRlIDxDMkNvbmZpZy5oPgorI2luY2x1ZGUgPERhdGFDb252ZXJ0ZXIuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FNZXNzYWdlLmg+CiAjaW5jbHVkZSA8bWVkaWEvTWVkaWFDb2RlY0J1ZmZlci5oPgogCkBAIC0zODIsNiArMzg0LDE0IEBACiAgICAgICovCiAgICAgdm9pZCBzdWJtaXQoY29uc3Qgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gJmJ1ZmZlcik7CiAKKyAgICAvKioKKyAgICAgKiBBcHBseSBEYXRhQ29udmVydGVyIGZyb20gfHNyY3wgdG8gfCpkc3R8IGlmIG5lZWRlZC4gSWYgfCpkc3R8IGlzIG51bGxwdHIsCisgICAgICogYSBuZXcgYnVmZmVyIGlzIGFsbG9jYXRlZC4KKyAgICAgKgorICAgICAqIFJldHVybnMgdHJ1ZSBpZiBjb252ZXJzaW9uIHdhcyBuZWVkZWQgYW5kIGV4ZWN1dGVkOyBmYWxzZSBvdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBjb252ZXJ0KGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJnNyYywgc3A8Q29kZWMyQnVmZmVyPiAqZHN0KTsKKwogcHJpdmF0ZToKICAgICAvLyBTa2lwQ3V0QnVmZmVyCiAgICAgaW50MzJfdCBtRGVsYXk7CkBAIC0zOTEsNiArNDAxLDEyIEBACiAKICAgICB2b2lkIHNldFNraXBDdXRCdWZmZXIoaW50MzJfdCBza2lwLCBpbnQzMl90IGN1dCk7CiAKKyAgICAvLyBEYXRhQ29udmVydGVyCisgICAgc3A8RGF0YUNvbnZlcnRlcj4gbURhdGFDb252ZXJ0ZXI7CisgICAgc3A8QU1lc3NhZ2U+IG1Gb3JtYXRXaXRoQ29udmVydGVyOworICAgIHN0ZDo6b3B0aW9uYWw8aW50MzJfdD4gbVNyY0VuY29kaW5nOworICAgIHN0ZDo6b3B0aW9uYWw8aW50MzJfdD4gbURzdEVuY29kaW5nOworCiAgICAgLy8gT3V0cHV0IHN0YXNoCiAKICAgICAvLyBTdHJ1Y3QgZm9yIGFuIGVudHJ5IGluIHRoZSBvdXRwdXQgc3Rhc2ggKG1QZW5kaW5nIGFuZCBtUmVvcmRlclN0YXNoKQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlY0NvbmZpZy5jcHAgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjQ29uZmlnLmNwcAppbmRleCBjMjc1MTg3Li4wMzQxOGQ5IDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjQ29uZmlnLmNwcAorKysgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjQ29uZmlnLmNwcApAQCAtNjU3LDI0ICs2NTcsMjkgQEAKICAgICBhZGQoQ29uZmlnTWFwcGVyKEtFWV9TQU1QTEVfUkFURSwgICBDMl9QQVJBTUtFWV9DT0RFRF9TQU1QTEVfUkFURSwgICJ2YWx1ZSIpCiAgICAgICAgIC5saW1pdFRvKEQ6OkFVRElPICYgRDo6Q09ERUQpKTsKIAotICAgIGFkZChDb25maWdNYXBwZXIoS0VZX1BDTV9FTkNPRElORywgIEMyX1BBUkFNS0VZX1BDTV9FTkNPRElORywgICAgICAgInZhbHVlIikKKyAgICBhdXRvIHBjbUVuY29kaW5nTWFwcGVyID0gW10oQzJWYWx1ZSB2KSAtPiBDMlZhbHVlIHsKKyAgICAgICAgaW50MzJfdCB2YWx1ZTsKKyAgICAgICAgQzJDb25maWc6OnBjbV9lbmNvZGluZ190IHRvOworICAgICAgICBpZiAodi5nZXQoJnZhbHVlKSAmJiBDMk1hcHBlcjo6bWFwKHZhbHVlLCAmdG8pKSB7CisgICAgICAgICAgICByZXR1cm4gdG87CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEMyVmFsdWUoKTsKKyAgICB9OworICAgIGF1dG8gcGNtRW5jb2RpbmdSZXZlcnNlID0gW10oQzJWYWx1ZSB2KSAtPiBDMlZhbHVlIHsKKyAgICAgICAgQzJDb25maWc6OnBjbV9lbmNvZGluZ190IHZhbHVlOworICAgICAgICBpbnQzMl90IHRvOworICAgICAgICB1c2luZyBDMlZhbHVlVHlwZT10eXBlbmFtZSBfYzJfcmVkdWNlX2VudW1fdG9fdW5kZXJseWluZ190eXBlPGRlY2x0eXBlKHZhbHVlKT46OnR5cGU7CisgICAgICAgIGlmICh2LmdldCgoQzJWYWx1ZVR5cGUqKSZ2YWx1ZSkgJiYgQzJNYXBwZXI6Om1hcCh2YWx1ZSwgJnRvKSkgeworICAgICAgICAgICAgcmV0dXJuIHRvOworICAgICAgICB9CisgICAgICAgIHJldHVybiBDMlZhbHVlKCk7CisgICAgfTsKKyAgICBhZGQoQ29uZmlnTWFwcGVyKEtFWV9QQ01fRU5DT0RJTkcsICAgICAgICAgICAgICBDMl9QQVJBTUtFWV9QQ01fRU5DT0RJTkcsICJ2YWx1ZSIpCiAgICAgICAgIC5saW1pdFRvKEQ6OkFVRElPKQotICAgICAgICAud2l0aE1hcHBlcnMoW10oQzJWYWx1ZSB2KSAtPiBDMlZhbHVlIHsKLSAgICAgICAgICAgIGludDMyX3QgdmFsdWU7Ci0gICAgICAgICAgICBDMkNvbmZpZzo6cGNtX2VuY29kaW5nX3QgdG87Ci0gICAgICAgICAgICBpZiAodi5nZXQoJnZhbHVlKSAmJiBDMk1hcHBlcjo6bWFwKHZhbHVlLCAmdG8pKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRvOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEMyVmFsdWUoKTsKLSAgICAgICAgfSwgW10oQzJWYWx1ZSB2KSAtPiBDMlZhbHVlIHsKLSAgICAgICAgICAgIEMyQ29uZmlnOjpwY21fZW5jb2RpbmdfdCB2YWx1ZTsKLSAgICAgICAgICAgIGludDMyX3QgdG87Ci0gICAgICAgICAgICB1c2luZyBDMlZhbHVlVHlwZT10eXBlbmFtZSBfYzJfcmVkdWNlX2VudW1fdG9fdW5kZXJseWluZ190eXBlPGRlY2x0eXBlKHZhbHVlKT46OnR5cGU7Ci0gICAgICAgICAgICBpZiAodi5nZXQoKEMyVmFsdWVUeXBlKikmdmFsdWUpICYmIEMyTWFwcGVyOjptYXAodmFsdWUsICZ0bykpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG87Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gQzJWYWx1ZSgpOwotICAgICAgICB9KSk7CisgICAgICAgIC53aXRoTWFwcGVycyhwY21FbmNvZGluZ01hcHBlciwgcGNtRW5jb2RpbmdSZXZlcnNlKSk7CisgICAgYWRkKENvbmZpZ01hcHBlcigiYW5kcm9pZC5fY29kZWMtcGNtLWVuY29kaW5nIiwgQzJfUEFSQU1LRVlfUENNX0VOQ09ESU5HLCAidmFsdWUiKQorICAgICAgICAubGltaXRUbyhEOjpBVURJTyAmIEQ6OlJFQUQpCisgICAgICAgIC53aXRoTWFwcGVycyhwY21FbmNvZGluZ01hcHBlciwgcGNtRW5jb2RpbmdSZXZlcnNlKSk7CiAKICAgICBhZGQoQ29uZmlnTWFwcGVyKEtFWV9JU19BRFRTLCBDMl9QQVJBTUtFWV9BQUNfUEFDS0FHSU5HLCAidmFsdWUiKQogICAgICAgICAubGltaXRUbyhEOjpBVURJTyAmIEQ6OkNPREVEKQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0ZyYW1lUmVhc3NlbWJsZXIuY3BwIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0ZyYW1lUmVhc3NlbWJsZXIuY3BwCmluZGV4IGFmMDU0YzcuLmNiOGI2YWIgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9GcmFtZVJlYXNzZW1ibGVyLmNwcAorKysgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vRnJhbWVSZWFzc2VtYmxlci5jcHAKQEAgLTg4LDggKzg4LDcgQEAKICAgICAgICAgY29uc3Qgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gJmJ1ZmZlciwKICAgICAgICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiAqaXRlbXMpIHsKICAgICBpbnQ2NF90IHRpbWVVczsKLSAgICBpZiAoYnVmZmVyLT5zaXplKCkgPT0gMHUKLSAgICAgICAgICAgIHx8ICFidWZmZXItPm1ldGEoKS0+ZmluZEludDY0KCJ0aW1lVXMiLCAmdGltZVVzKSkgeworICAgIGlmICghYnVmZmVyLT5tZXRhKCktPmZpbmRJbnQ2NCgidGltZVVzIiwgJnRpbWVVcykpIHsKICAgICAgICAgcmV0dXJuIEMyX0JBRF9WQUxVRTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi90ZXN0cy9GcmFtZVJlYXNzZW1ibGVyX3Rlc3QuY3BwIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL3Rlc3RzL0ZyYW1lUmVhc3NlbWJsZXJfdGVzdC5jcHAKaW5kZXggNjczOGVlNy4uMGJlOTM0YSAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWMyL3NmcGx1Z2luL3Rlc3RzL0ZyYW1lUmVhc3NlbWJsZXJfdGVzdC5jcHAKKysrIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL3Rlc3RzL0ZyYW1lUmVhc3NlbWJsZXJfdGVzdC5jcHAKQEAgLTUzLDcgKzUzLDggQEAKICAgICAgICAgICAgIEMyQ29uZmlnOjpwY21fZW5jb2RpbmdfdCBlbmNvZGluZywKICAgICAgICAgICAgIHNpemVfdCBpbnB1dEZyYW1lU2l6ZUluQnl0ZXMsCiAgICAgICAgICAgICBzaXplX3QgY291bnQsCi0gICAgICAgICAgICBzaXplX3QgZXhwZWN0ZWRPdXRwdXRTaXplKSB7CisgICAgICAgICAgICBzaXplX3QgZXhwZWN0ZWRPdXRwdXRTaXplLAorICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZUVvcykgewogICAgICAgICBGcmFtZVJlYXNzZW1ibGVyIGZyYW1lUmVhc3NlbWJsZXI7CiAgICAgICAgIGZyYW1lUmVhc3NlbWJsZXIuaW5pdCgKICAgICAgICAgICAgICAgICBtUG9vbCwKQEAgLTY3LDcgKzY4LDcgQEAKIAogICAgICAgICBzaXplX3QgaW5wdXRJbmRleCA9IDAsIG91dHB1dEluZGV4ID0gMDsKICAgICAgICAgc2l6ZV90IGV4cGVjdENvdW50ID0gMDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQgKyAoc2VwYXJhdGVFb3MgPyAxIDogMCk7ICsraSkgewogICAgICAgICAgICAgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gYnVmZmVyID0gbmV3IE1lZGlhQ29kZWNCdWZmZXIoCiAgICAgICAgICAgICAgICAgICAgIG5ldyBBTWVzc2FnZSwgbmV3IEFCdWZmZXIoaW5wdXRGcmFtZVNpemVJbkJ5dGVzKSk7CiAgICAgICAgICAgICBidWZmZXItPnNldFJhbmdlKDAsIGlucHV0RnJhbWVTaXplSW5CeXRlcyk7CkBAIC03Nyw4ICs3OCwxMiBAQAogICAgICAgICAgICAgaWYgKGkgPT0gY291bnQgLSAxKSB7CiAgICAgICAgICAgICAgICAgYnVmZmVyLT5tZXRhKCktPnNldEludDMyKCJlb3MiLCAxKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgaW5wdXRGcmFtZVNpemVJbkJ5dGVzOyArK2osICsraW5wdXRJbmRleCkgewotICAgICAgICAgICAgICAgIGJ1ZmZlci0+YmFzZSgpW2pdID0gKGlucHV0SW5kZXggJiAweEZGKTsKKyAgICAgICAgICAgIGlmIChpID09IGNvdW50ICYmIHNlcGFyYXRlRW9zKSB7CisgICAgICAgICAgICAgICAgYnVmZmVyLT5zZXRSYW5nZSgwLCAwKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBpbnB1dEZyYW1lU2l6ZUluQnl0ZXM7ICsraiwgKytpbnB1dEluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+YmFzZSgpW2pdID0gKGlucHV0SW5kZXggJiAweEZGKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEMyV29yaz4+IGl0ZW1zOwogICAgICAgICAgICAgQVNTRVJUX0VRKEMyX09LLCBmcmFtZVJlYXNzZW1ibGVyLnByb2Nlc3MoYnVmZmVyLCAmaXRlbXMpKTsKQEAgLTEwNSw3ICsxMTAsOCBAQAogICAgICAgICAgICAgICAgIEFTU0VSVF9FUShlbmNvZGVyRnJhbWVTaXplICogQnl0ZXNQZXJTYW1wbGUoZW5jb2RpbmcpLCB2aWV3LmNhcGFjaXR5KCkpOwogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgdmlldy5jYXBhY2l0eSgpOyArK2osICsrb3V0cHV0SW5kZXgpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX1RSVUUob3V0cHV0SW5kZXggPCBpbnB1dEluZGV4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGlucHV0SW5kZXggPT0gaW5wdXRGcmFtZVNpemVJbkJ5dGVzICogY291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBpbnB1dEluZGV4ID09IGlucHV0RnJhbWVTaXplSW5CeXRlcyAqIGNvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgPDwgImlucHV0SW5kZXggPSAiIDw8IGlucHV0SW5kZXggPDwgIiBvdXRwdXRJbmRleCA9ICIgPDwgb3V0cHV0SW5kZXg7CiAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZXhwZWN0ZWQgPSBvdXRwdXRJbmRleCA8IGlucHV0SW5kZXggPyAob3V0cHV0SW5kZXggJiAweEZGKSA6IDA7CiAgICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RDb3VudCA8IDEwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICArK2V4cGVjdENvdW50OwpAQCAtMTM3LDIwNCArMTQzLDIzOSBAQAogLy8gUHVzaCBmcmFtZXMgd2l0aCBleGFjdGx5IHRoZSBzYW1lIHNpemUgYXMgdGhlIGVuY29kZXIgcmVxdWVzdGVkLgogVEVTVF9GKEZyYW1lUmVhc3NlbWJsZXJUZXN0LCBQdXNoRXhhY3RGcmFtZVNpemUpIHsKICAgICBBU1NFUlRfRVEoT0ssIGluaXRTdGF0dXMoKSk7Ci0gICAgdGVzdFB1c2hTYW1lU2l6ZSgKLSAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAotICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCi0gICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCi0gICAgICAgICAgICBQQ01fOCwKLSAgICAgICAgICAgIDEwMjQgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDEwMjQgc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDEgYnl0ZXMvc2FtcGxlICovLAotICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCi0gICAgICAgICAgICAxMDI0MCAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDEwICogMTAyNCBieXRlcy9mcmFtZSAqLyk7Ci0gICAgdGVzdFB1c2hTYW1lU2l6ZSgKLSAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAotICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCi0gICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCi0gICAgICAgICAgICBQQ01fMTYsCi0gICAgICAgICAgICAyMDQ4IC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgPSAxMDI0IHNhbXBsZXMgKiAxIGNoYW5uZWwgKiAyIGJ5dGVzL3NhbXBsZSAqLywKLSAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAotICAgICAgICAgICAgMjA0ODAgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSAxMCAqIDIwNDggYnl0ZXMvZnJhbWUgKi8pOwotICAgIHRlc3RQdXNoU2FtZVNpemUoCi0gICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKLSAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAotICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAotICAgICAgICAgICAgUENNX0ZMT0FULAotICAgICAgICAgICAgNDA5NiAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gMTAyNCBzYW1wbGVzICogMSBjaGFubmVsICogNCBieXRlcy9zYW1wbGUgKi8sCi0gICAgICAgICAgICAxMCAvKiBjb3VudCAqLywKLSAgICAgICAgICAgIDQwOTYwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMTAgKiA0MDk2IGJ5dGVzL2ZyYW1lICovKTsKKyAgICBmb3IgKGJvb2wgc2VwYXJhdGVFb3MgOiB7ZmFsc2UsIHRydWV9KSB7CisgICAgICAgIHRlc3RQdXNoU2FtZVNpemUoCisgICAgICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCisgICAgICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCisgICAgICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAorICAgICAgICAgICAgICAgIFBDTV84LAorICAgICAgICAgICAgICAgIDEwMjQgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDEwMjQgc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDEgYnl0ZXMvc2FtcGxlICovLAorICAgICAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAorICAgICAgICAgICAgICAgIDEwMjQwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMTAgKiAxMDI0IGJ5dGVzL2ZyYW1lICovLAorICAgICAgICAgICAgICAgIHNlcGFyYXRlRW9zKTsKKyAgICAgICAgdGVzdFB1c2hTYW1lU2l6ZSgKKyAgICAgICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKKyAgICAgICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKKyAgICAgICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCisgICAgICAgICAgICAgICAgUENNXzE2LAorICAgICAgICAgICAgICAgIDIwNDggLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDEwMjQgc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDIgYnl0ZXMvc2FtcGxlICovLAorICAgICAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAorICAgICAgICAgICAgICAgIDIwNDgwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMTAgKiAyMDQ4IGJ5dGVzL2ZyYW1lICovLAorICAgICAgICAgICAgICAgIHNlcGFyYXRlRW9zKTsKKyAgICAgICAgdGVzdFB1c2hTYW1lU2l6ZSgKKyAgICAgICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKKyAgICAgICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKKyAgICAgICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCisgICAgICAgICAgICAgICAgUENNX0ZMT0FULAorICAgICAgICAgICAgICAgIDQwOTYgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDEwMjQgc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDQgYnl0ZXMvc2FtcGxlICovLAorICAgICAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAorICAgICAgICAgICAgICAgIDQwOTYwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMTAgKiA0MDk2IGJ5dGVzL2ZyYW1lICovLAorICAgICAgICAgICAgICAgIHNlcGFyYXRlRW9zKTsKKyAgICB9CiB9CiAKIC8vIFB1c2ggZnJhbWVzIHdpdGggaGFsZiB0aGUgc2l6ZSB0aGF0IHRoZSBlbmNvZGVyIHJlcXVlc3RlZC4KIFRFU1RfRihGcmFtZVJlYXNzZW1ibGVyVGVzdCwgUHVzaEhhbGZGcmFtZVNpemUpIHsKICAgICBBU1NFUlRfRVEoT0ssIGluaXRTdGF0dXMoKSk7Ci0gICAgdGVzdFB1c2hTYW1lU2l6ZSgKLSAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAotICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCi0gICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCi0gICAgICAgICAgICBQQ01fOCwKLSAgICAgICAgICAgIDUxMiAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gNTEyIHNhbXBsZXMgKiAxIGNoYW5uZWwgKiAxIGJ5dGVzIHBlciBzYW1wbGUgKi8sCi0gICAgICAgICAgICAxMCAvKiBjb3VudCAqLywKLSAgICAgICAgICAgIDUxMjAgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSA1ICogMTAyNCBieXRlcy9mcmFtZSAqLyk7Ci0gICAgdGVzdFB1c2hTYW1lU2l6ZSgKLSAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAotICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCi0gICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCi0gICAgICAgICAgICBQQ01fMTYsCi0gICAgICAgICAgICAxMDI0IC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgPSA1MTIgc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDIgYnl0ZXMgcGVyIHNhbXBsZSAqLywKLSAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAotICAgICAgICAgICAgMTAyNDAgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSA1ICogMjA0OCBieXRlcy9mcmFtZSAqLyk7Ci0gICAgdGVzdFB1c2hTYW1lU2l6ZSgKLSAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAotICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCi0gICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCi0gICAgICAgICAgICBQQ01fRkxPQVQsCi0gICAgICAgICAgICAyMDQ4IC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgPSA1MTIgc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDQgYnl0ZXMgcGVyIHNhbXBsZSAqLywKLSAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAotICAgICAgICAgICAgMjA0ODAgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSA1ICogNDA5NiBieXRlcy9mcmFtZSAqLyk7CisgICAgZm9yIChib29sIHNlcGFyYXRlRW9zIDoge2ZhbHNlLCB0cnVlfSkgeworICAgICAgICB0ZXN0UHVzaFNhbWVTaXplKAorICAgICAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAorICAgICAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAorICAgICAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKKyAgICAgICAgICAgICAgICBQQ01fOCwKKyAgICAgICAgICAgICAgICA1MTIgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDUxMiBzYW1wbGVzICogMSBjaGFubmVsICogMSBieXRlcy9zYW1wbGUgKi8sCisgICAgICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCisgICAgICAgICAgICAgICAgNTEyMCAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDUgKiAxMDI0IGJ5dGVzL2ZyYW1lICovLAorICAgICAgICAgICAgICAgIHNlcGFyYXRlRW9zKTsKKyAgICAgICAgdGVzdFB1c2hTYW1lU2l6ZSgKKyAgICAgICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKKyAgICAgICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKKyAgICAgICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCisgICAgICAgICAgICAgICAgUENNXzE2LAorICAgICAgICAgICAgICAgIDEwMjQgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDUxMiBzYW1wbGVzICogMSBjaGFubmVsICogMiBieXRlcy9zYW1wbGUgKi8sCisgICAgICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCisgICAgICAgICAgICAgICAgMTAyNDAgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSA1ICogMjA0OCBieXRlcy9mcmFtZSAqLywKKyAgICAgICAgICAgICAgICBzZXBhcmF0ZUVvcyk7CisgICAgICAgIHRlc3RQdXNoU2FtZVNpemUoCisgICAgICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCisgICAgICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCisgICAgICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAorICAgICAgICAgICAgICAgIFBDTV9GTE9BVCwKKyAgICAgICAgICAgICAgICAyMDQ4IC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgPSA1MTIgc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDQgYnl0ZXMvc2FtcGxlICovLAorICAgICAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAorICAgICAgICAgICAgICAgIDIwNDgwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gNSAqIDQwOTYgYnl0ZXMvZnJhbWUgKi8sCisgICAgICAgICAgICAgICAgc2VwYXJhdGVFb3MpOworICAgIH0KIH0KIAogLy8gUHVzaCBmcmFtZXMgd2l0aCB0d2ljZSB0aGUgc2l6ZSB0aGF0IHRoZSBlbmNvZGVyIHJlcXVlc3RlZC4KIFRFU1RfRihGcmFtZVJlYXNzZW1ibGVyVGVzdCwgUHVzaERvdWJsZUZyYW1lU2l6ZSkgewogICAgIEFTU0VSVF9FUShPSywgaW5pdFN0YXR1cygpKTsKLSAgICB0ZXN0UHVzaFNhbWVTaXplKAotICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCi0gICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKLSAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKLSAgICAgICAgICAgIFBDTV84LAotICAgICAgICAgICAgMjA0OCAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gMjA0OCBzYW1wbGVzICogMSBjaGFubmVsICogMSBieXRlcyBwZXIgc2FtcGxlICovLAotICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCi0gICAgICAgICAgICAyMDQ4MCAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDIwICogMTAyNCBieXRlcy9mcmFtZSAqLyk7Ci0gICAgdGVzdFB1c2hTYW1lU2l6ZSgKLSAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAotICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCi0gICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCi0gICAgICAgICAgICBQQ01fMTYsCi0gICAgICAgICAgICA0MDk2IC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgPSAyMDQ4IHNhbXBsZXMgKiAxIGNoYW5uZWwgKiAyIGJ5dGVzIHBlciBzYW1wbGUgKi8sCi0gICAgICAgICAgICAxMCAvKiBjb3VudCAqLywKLSAgICAgICAgICAgIDQwOTYwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMjAgKiAyMDQ4IGJ5dGVzL2ZyYW1lICovKTsKLSAgICB0ZXN0UHVzaFNhbWVTaXplKAotICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCi0gICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKLSAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKLSAgICAgICAgICAgIFBDTV9GTE9BVCwKLSAgICAgICAgICAgIDgxOTIgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDIwNDggc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDQgYnl0ZXMgcGVyIHNhbXBsZSAqLywKLSAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAotICAgICAgICAgICAgODE5MjAgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSAyMCAqIDQwOTYgYnl0ZXMvZnJhbWUgKi8pOworICAgIGZvciAoYm9vbCBzZXBhcmF0ZUVvcyA6IHtmYWxzZSwgdHJ1ZX0pIHsKKyAgICAgICAgdGVzdFB1c2hTYW1lU2l6ZSgKKyAgICAgICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKKyAgICAgICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKKyAgICAgICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCisgICAgICAgICAgICAgICAgUENNXzgsCisgICAgICAgICAgICAgICAgMjA0OCAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gMjA0OCBzYW1wbGVzICogMSBjaGFubmVsICogMSBieXRlcy9zYW1wbGUgKi8sCisgICAgICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCisgICAgICAgICAgICAgICAgMjA0ODAgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSAyMCAqIDEwMjQgYnl0ZXMvZnJhbWUgKi8sCisgICAgICAgICAgICAgICAgc2VwYXJhdGVFb3MpOworICAgICAgICB0ZXN0UHVzaFNhbWVTaXplKAorICAgICAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAorICAgICAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAorICAgICAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKKyAgICAgICAgICAgICAgICBQQ01fMTYsCisgICAgICAgICAgICAgICAgNDA5NiAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gMjA0OCBzYW1wbGVzICogMSBjaGFubmVsICogMiBieXRlcy9zYW1wbGUgKi8sCisgICAgICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCisgICAgICAgICAgICAgICAgNDA5NjAgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSAyMCAqIDIwNDggYnl0ZXMvZnJhbWUgKi8sCisgICAgICAgICAgICAgICAgc2VwYXJhdGVFb3MpOworICAgICAgICB0ZXN0UHVzaFNhbWVTaXplKAorICAgICAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAorICAgICAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAorICAgICAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKKyAgICAgICAgICAgICAgICBQQ01fRkxPQVQsCisgICAgICAgICAgICAgICAgODE5MiAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gMjA0OCBzYW1wbGVzICogMSBjaGFubmVsICogNCBieXRlcy9zYW1wbGUgKi8sCisgICAgICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCisgICAgICAgICAgICAgICAgODE5MjAgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSAyMCAqIDQwOTYgYnl0ZXMvZnJhbWUgKi8sCisgICAgICAgICAgICAgICAgc2VwYXJhdGVFb3MpOworICAgIH0KIH0KIAogLy8gUHVzaCBmcmFtZXMgd2l0aCBhIGxpdHRsZSBiaXQgbGFyZ2VyICgrNSBzYW1wbGVzKSB0aGFuIHRoZSByZXF1ZXN0ZWQgc2l6ZS4KIFRFU1RfRihGcmFtZVJlYXNzZW1ibGVyVGVzdCwgUHVzaExpdHRsZUxhcmdlckZyYW1lU2l6ZSkgewogICAgIEFTU0VSVF9FUShPSywgaW5pdFN0YXR1cygpKTsKLSAgICB0ZXN0UHVzaFNhbWVTaXplKAotICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCi0gICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKLSAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKLSAgICAgICAgICAgIFBDTV84LAotICAgICAgICAgICAgMTAyOSAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gMTAyOSBzYW1wbGVzICogMSBjaGFubmVsICogMSBieXRlcyBwZXIgc2FtcGxlICovLAotICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCi0gICAgICAgICAgICAxMTI2NCAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDExICogMTAyNCBieXRlcy9mcmFtZSAqLyk7Ci0gICAgdGVzdFB1c2hTYW1lU2l6ZSgKLSAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAotICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCi0gICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCi0gICAgICAgICAgICBQQ01fMTYsCi0gICAgICAgICAgICAyMDU4IC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgPSAxMDI5IHNhbXBsZXMgKiAxIGNoYW5uZWwgKiAyIGJ5dGVzIHBlciBzYW1wbGUgKi8sCi0gICAgICAgICAgICAxMCAvKiBjb3VudCAqLywKLSAgICAgICAgICAgIDIyNTI4IC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMTEgKiAyMDQ4IGJ5dGVzL2ZyYW1lICovKTsKLSAgICB0ZXN0UHVzaFNhbWVTaXplKAotICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCi0gICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKLSAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKLSAgICAgICAgICAgIFBDTV9GTE9BVCwKLSAgICAgICAgICAgIDQxMTYgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDEwMjkgc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDQgYnl0ZXMgcGVyIHNhbXBsZSAqLywKLSAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAotICAgICAgICAgICAgNDUwNTYgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSAxMSAqIDQwOTYgYnl0ZXMvZnJhbWUgKi8pOworICAgIGZvciAoYm9vbCBzZXBhcmF0ZUVvcyA6IHtmYWxzZSwgdHJ1ZX0pIHsKKyAgICAgICAgdGVzdFB1c2hTYW1lU2l6ZSgKKyAgICAgICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKKyAgICAgICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKKyAgICAgICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCisgICAgICAgICAgICAgICAgUENNXzgsCisgICAgICAgICAgICAgICAgMTAyOSAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gMTAyOSBzYW1wbGVzICogMSBjaGFubmVsICogMSBieXRlcy9zYW1wbGUgKi8sCisgICAgICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCisgICAgICAgICAgICAgICAgMTEyNjQgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSAxMSAqIDEwMjQgYnl0ZXMvZnJhbWUgKi8sCisgICAgICAgICAgICAgICAgc2VwYXJhdGVFb3MpOworICAgICAgICB0ZXN0UHVzaFNhbWVTaXplKAorICAgICAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAorICAgICAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAorICAgICAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKKyAgICAgICAgICAgICAgICBQQ01fMTYsCisgICAgICAgICAgICAgICAgMjA1OCAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gMTAyOSBzYW1wbGVzICogMSBjaGFubmVsICogMiBieXRlcy9zYW1wbGUgKi8sCisgICAgICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCisgICAgICAgICAgICAgICAgMjI1MjggLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSAxMSAqIDIwNDggYnl0ZXMvZnJhbWUgKi8sCisgICAgICAgICAgICAgICAgc2VwYXJhdGVFb3MpOworICAgICAgICB0ZXN0UHVzaFNhbWVTaXplKAorICAgICAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAorICAgICAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAorICAgICAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKKyAgICAgICAgICAgICAgICBQQ01fRkxPQVQsCisgICAgICAgICAgICAgICAgNDExNiAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gMTAyOSBzYW1wbGVzICogMSBjaGFubmVsICogNCBieXRlcy9zYW1wbGUgKi8sCisgICAgICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCisgICAgICAgICAgICAgICAgNDUwNTYgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSAxMSAqIDQwOTYgYnl0ZXMvZnJhbWUgKi8sCisgICAgICAgICAgICAgICAgc2VwYXJhdGVFb3MpOworICAgIH0KIH0KIAogLy8gUHVzaCBmcmFtZXMgd2l0aCBhIGxpdHRsZSBiaXQgc21hbGxlciAoLTUgc2FtcGxlcykgdGhhbiB0aGUgcmVxdWVzdGVkIHNpemUuCiBURVNUX0YoRnJhbWVSZWFzc2VtYmxlclRlc3QsIFB1c2hMaXR0bGVTbWFsbGVyRnJhbWVTaXplKSB7CiAgICAgQVNTRVJUX0VRKE9LLCBpbml0U3RhdHVzKCkpOwotICAgIHRlc3RQdXNoU2FtZVNpemUoCi0gICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKLSAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAotICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAotICAgICAgICAgICAgUENNXzgsCi0gICAgICAgICAgICAxMDE5IC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgPSAxMDE5IHNhbXBsZXMgKiAxIGNoYW5uZWwgKiAxIGJ5dGVzIHBlciBzYW1wbGUgKi8sCi0gICAgICAgICAgICAxMCAvKiBjb3VudCAqLywKLSAgICAgICAgICAgIDEwMjQwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMTAgKiAxMDI0IGJ5dGVzL2ZyYW1lICovKTsKLSAgICB0ZXN0UHVzaFNhbWVTaXplKAotICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCi0gICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKLSAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKLSAgICAgICAgICAgIFBDTV8xNiwKLSAgICAgICAgICAgIDIwMzggLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDEwMTkgc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDIgYnl0ZXMgcGVyIHNhbXBsZSAqLywKLSAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAotICAgICAgICAgICAgMjA0ODAgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSAxMCAqIDIwNDggYnl0ZXMvZnJhbWUgKi8pOwotICAgIHRlc3RQdXNoU2FtZVNpemUoCi0gICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKLSAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAotICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAotICAgICAgICAgICAgUENNX0ZMT0FULAotICAgICAgICAgICAgNDA3NiAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gMTAxOSBzYW1wbGVzICogMSBjaGFubmVsICogNCBieXRlcyBwZXIgc2FtcGxlICovLAotICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCi0gICAgICAgICAgICA0MDk2MCAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDEwICogNDA5NiBieXRlcy9mcmFtZSAqLyk7CisgICAgZm9yIChib29sIHNlcGFyYXRlRW9zIDoge2ZhbHNlLCB0cnVlfSkgeworICAgICAgICB0ZXN0UHVzaFNhbWVTaXplKAorICAgICAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAorICAgICAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAorICAgICAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKKyAgICAgICAgICAgICAgICBQQ01fOCwKKyAgICAgICAgICAgICAgICAxMDE5IC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgPSAxMDE5IHNhbXBsZXMgKiAxIGNoYW5uZWwgKiAxIGJ5dGVzL3NhbXBsZSAqLywKKyAgICAgICAgICAgICAgICAxMCAvKiBjb3VudCAqLywKKyAgICAgICAgICAgICAgICAxMDI0MCAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDEwICogMTAyNCBieXRlcy9mcmFtZSAqLywKKyAgICAgICAgICAgICAgICBzZXBhcmF0ZUVvcyk7CisgICAgICAgIHRlc3RQdXNoU2FtZVNpemUoCisgICAgICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCisgICAgICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCisgICAgICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAorICAgICAgICAgICAgICAgIFBDTV8xNiwKKyAgICAgICAgICAgICAgICAyMDM4IC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgPSAxMDE5IHNhbXBsZXMgKiAxIGNoYW5uZWwgKiAyIGJ5dGVzL3NhbXBsZSAqLywKKyAgICAgICAgICAgICAgICAxMCAvKiBjb3VudCAqLywKKyAgICAgICAgICAgICAgICAyMDQ4MCAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDEwICogMjA0OCBieXRlcy9mcmFtZSAqLywKKyAgICAgICAgICAgICAgICBzZXBhcmF0ZUVvcyk7CisgICAgICAgIHRlc3RQdXNoU2FtZVNpemUoCisgICAgICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCisgICAgICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCisgICAgICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAorICAgICAgICAgICAgICAgIFBDTV9GTE9BVCwKKyAgICAgICAgICAgICAgICA0MDc2IC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgPSAxMDE5IHNhbXBsZXMgKiAxIGNoYW5uZWwgKiA0IGJ5dGVzL3NhbXBsZSAqLywKKyAgICAgICAgICAgICAgICAxMCAvKiBjb3VudCAqLywKKyAgICAgICAgICAgICAgICA0MDk2MCAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDEwICogNDA5NiBieXRlcy9mcmFtZSAqLywKKyAgICAgICAgICAgICAgICBzZXBhcmF0ZUVvcyk7CisgICAgfQogfQogCiAvLyBQdXNoIHNpbmdsZS1ieXRlIGZyYW1lcwogVEVTVF9GKEZyYW1lUmVhc3NlbWJsZXJUZXN0LCBQdXNoU2luZ2xlQnl0ZSkgewogICAgIEFTU0VSVF9FUShPSywgaW5pdFN0YXR1cygpKTsKLSAgICB0ZXN0UHVzaFNhbWVTaXplKAotICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCi0gICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKLSAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKLSAgICAgICAgICAgIFBDTV84LAotICAgICAgICAgICAgMSAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzICovLAotICAgICAgICAgICAgMTAwMDAwIC8qIGNvdW50ICovLAotICAgICAgICAgICAgMTAwMzUyIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gOTggKiAxMDI0IGJ5dGVzL2ZyYW1lICovKTsKLSAgICB0ZXN0UHVzaFNhbWVTaXplKAotICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCi0gICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKLSAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKLSAgICAgICAgICAgIFBDTV8xNiwKLSAgICAgICAgICAgIDEgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyAqLywKLSAgICAgICAgICAgIDEwMDAwMCAvKiBjb3VudCAqLywKLSAgICAgICAgICAgIDEwMDM1MiAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDQ5ICogMjA0OCBieXRlcy9mcmFtZSAqLyk7Ci0gICAgdGVzdFB1c2hTYW1lU2l6ZSgKLSAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAotICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCi0gICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCi0gICAgICAgICAgICBQQ01fRkxPQVQsCi0gICAgICAgICAgICAxIC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgKi8sCi0gICAgICAgICAgICAxMDAwMDAgLyogY291bnQgKi8sCi0gICAgICAgICAgICAxMDI0MDAgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSAyNSAqIDQwOTYgYnl0ZXMvZnJhbWUgKi8pOworICAgIGZvciAoYm9vbCBzZXBhcmF0ZUVvcyA6IHtmYWxzZSwgdHJ1ZX0pIHsKKyAgICAgICAgdGVzdFB1c2hTYW1lU2l6ZSgKKyAgICAgICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKKyAgICAgICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKKyAgICAgICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCisgICAgICAgICAgICAgICAgUENNXzgsCisgICAgICAgICAgICAgICAgMSAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzICovLAorICAgICAgICAgICAgICAgIDEwMDAwMCAvKiBjb3VudCAqLywKKyAgICAgICAgICAgICAgICAxMDAzNTIgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSA5OCAqIDEwMjQgYnl0ZXMvZnJhbWUgKi8sCisgICAgICAgICAgICAgICAgc2VwYXJhdGVFb3MpOworICAgICAgICB0ZXN0UHVzaFNhbWVTaXplKAorICAgICAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAorICAgICAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAorICAgICAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKKyAgICAgICAgICAgICAgICBQQ01fMTYsCisgICAgICAgICAgICAgICAgMSAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzICovLAorICAgICAgICAgICAgICAgIDEwMDAwMCAvKiBjb3VudCAqLywKKyAgICAgICAgICAgICAgICAxMDAzNTIgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSA0OSAqIDIwNDggYnl0ZXMvZnJhbWUgKi8sCisgICAgICAgICAgICAgICAgc2VwYXJhdGVFb3MpOworICAgICAgICB0ZXN0UHVzaFNhbWVTaXplKAorICAgICAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAorICAgICAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAorICAgICAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKKyAgICAgICAgICAgICAgICBQQ01fRkxPQVQsCisgICAgICAgICAgICAgICAgMSAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzICovLAorICAgICAgICAgICAgICAgIDEwMDAwMCAvKiBjb3VudCAqLywKKyAgICAgICAgICAgICAgICAxMDI0MDAgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSAyNSAqIDQwOTYgYnl0ZXMvZnJhbWUgKi8sCisgICAgICAgICAgICAgICAgc2VwYXJhdGVFb3MpOworICAgIH0KIH0KIAogLy8gUHVzaCBvbmUgYmlnIGNodW5rLgogVEVTVF9GKEZyYW1lUmVhc3NlbWJsZXJUZXN0LCBQdXNoQmlnQ2h1bmspIHsKICAgICBBU1NFUlRfRVEoT0ssIGluaXRTdGF0dXMoKSk7Ci0gICAgdGVzdFB1c2hTYW1lU2l6ZSgKLSAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAotICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCi0gICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCi0gICAgICAgICAgICBQQ01fOCwKLSAgICAgICAgICAgIDEwMDAwMCAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzICovLAotICAgICAgICAgICAgMSAvKiBjb3VudCAqLywKLSAgICAgICAgICAgIDEwMDM1MiAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDk4ICogMTAyNCBieXRlcy9mcmFtZSAqLyk7Ci0gICAgdGVzdFB1c2hTYW1lU2l6ZSgKLSAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAotICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCi0gICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCi0gICAgICAgICAgICBQQ01fMTYsCi0gICAgICAgICAgICAxMDAwMDAgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyAqLywKLSAgICAgICAgICAgIDEgLyogY291bnQgKi8sCi0gICAgICAgICAgICAxMDAzNTIgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSA0OSAqIDIwNDggYnl0ZXMvZnJhbWUgKi8pOwotICAgIHRlc3RQdXNoU2FtZVNpemUoCi0gICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKLSAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAotICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAotICAgICAgICAgICAgUENNX0ZMT0FULAotICAgICAgICAgICAgMTAwMDAwIC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgKi8sCi0gICAgICAgICAgICAxIC8qIGNvdW50ICovLAotICAgICAgICAgICAgMTAyNDAwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMjUgKiA0MDk2IGJ5dGVzL2ZyYW1lICovKTsKKyAgICBmb3IgKGJvb2wgc2VwYXJhdGVFb3MgOiB7ZmFsc2UsIHRydWV9KSB7CisgICAgICAgIHRlc3RQdXNoU2FtZVNpemUoCisgICAgICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCisgICAgICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCisgICAgICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAorICAgICAgICAgICAgICAgIFBDTV84LAorICAgICAgICAgICAgICAgIDEwMDAwMCAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzICovLAorICAgICAgICAgICAgICAgIDEgLyogY291bnQgKi8sCisgICAgICAgICAgICAgICAgMTAwMzUyIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gOTggKiAxMDI0IGJ5dGVzL2ZyYW1lICovLAorICAgICAgICAgICAgICAgIHNlcGFyYXRlRW9zKTsKKyAgICAgICAgdGVzdFB1c2hTYW1lU2l6ZSgKKyAgICAgICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKKyAgICAgICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKKyAgICAgICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCisgICAgICAgICAgICAgICAgUENNXzE2LAorICAgICAgICAgICAgICAgIDEwMDAwMCAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzICovLAorICAgICAgICAgICAgICAgIDEgLyogY291bnQgKi8sCisgICAgICAgICAgICAgICAgMTAwMzUyIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gNDkgKiAyMDQ4IGJ5dGVzL2ZyYW1lICovLAorICAgICAgICAgICAgICAgIHNlcGFyYXRlRW9zKTsKKyAgICAgICAgdGVzdFB1c2hTYW1lU2l6ZSgKKyAgICAgICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKKyAgICAgICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKKyAgICAgICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCisgICAgICAgICAgICAgICAgUENNX0ZMT0FULAorICAgICAgICAgICAgICAgIDEwMDAwMCAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzICovLAorICAgICAgICAgICAgICAgIDEgLyogY291bnQgKi8sCisgICAgICAgICAgICAgICAgMTAyNDAwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMjUgKiA0MDk2IGJ5dGVzL2ZyYW1lICovLAorICAgICAgICAgICAgICAgIHNlcGFyYXRlRW9zKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjcy9tNHZfaDI2My9lbmMvc3JjL2Zhc3RpZGN0LmNwcCBiL21lZGlhL2NvZGVjcy9tNHZfaDI2My9lbmMvc3JjL2Zhc3RpZGN0LmNwcAppbmRleCA2ODhlZmZjLi5lYzFiMjhmIDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlY3MvbTR2X2gyNjMvZW5jL3NyYy9mYXN0aWRjdC5jcHAKKysrIGIvbWVkaWEvY29kZWNzL200dl9oMjYzL2VuYy9zcmMvZmFzdGlkY3QuY3BwCkBAIC03Niw2ICs3Niw4IEBACiAgICAgcmV0dXJuIDsKIH0KIAorLyogSWdub3Jpbmcgb3ZlcmZsb3dzIGFzIGlkY3QgZnVuY3Rpb24gZXhwZWN0cyBhbmQgdXNlcyBvdmVyZmxvd3MgKi8KK19fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkKIHZvaWQgaWRjdF9jb2wyKFNob3J0ICpibGspCiB7CiAgICAgaW50MzIgeDAsIHgxLCB4MywgeDUsIHg3Oy8vLCB4ODsKQEAgLTEwMiw2ICsxMDQsOCBAQAogICAgIHJldHVybiA7CiB9CiAKKy8qIElnbm9yaW5nIG92ZXJmbG93cyBhcyBpZGN0IGZ1bmN0aW9uIGV4cGVjdHMgYW5kIHVzZXMgb3ZlcmZsb3dzICovCitfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZSgic2lnbmVkLWludGVnZXItb3ZlcmZsb3ciKSkpCiB2b2lkIGlkY3RfY29sMyhTaG9ydCAqYmxrKQogewogICAgIGludDMyIHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeDg7CkBAIC0xMzcsNiArMTQxLDggQEAKICAgICByZXR1cm4gOwogfQogCisvKiBJZ25vcmluZyBvdmVyZmxvd3MgYXMgaWRjdCBmdW5jdGlvbiBleHBlY3RzIGFuZCB1c2VzIG92ZXJmbG93cyAqLworX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikpKQogdm9pZCBpZGN0X2NvbDQoU2hvcnQgKmJsaykKIHsKICAgICBpbnQzMiB4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHg4OwpAQCAtMTgwLDYgKzE4Niw4IEBACiB9CiAKICNpZm5kZWYgU01BTExfRENUCisvKiBJZ25vcmluZyBvdmVyZmxvd3MgYXMgaWRjdCBmdW5jdGlvbiBleHBlY3RzIGFuZCB1c2VzIG92ZXJmbG93cyAqLworX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikpKQogdm9pZCBpZGN0X2NvbDB4NDAoU2hvcnQgKmJsaykKIHsKICAgICBpbnQzMiB4MSwgeDMsIHg1LCB4NzsvLywgeDg7CkBAIC0yMzAsNiArMjM4LDggQEAKICAgICByZXR1cm4gOwogfQogCisvKiBJZ25vcmluZyBvdmVyZmxvd3MgYXMgaWRjdCBmdW5jdGlvbiBleHBlY3RzIGFuZCB1c2VzIG92ZXJmbG93cyAqLworX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikpKQogdm9pZCBpZGN0X2NvbDB4MTAoU2hvcnQgKmJsaykKIHsKICAgICBpbnQzMiB4MSwgeDMsIHg1LCAgeDc7CkBAIC0yNTYsNiArMjY2LDggQEAKIAogI2VuZGlmIC8qIFNNQUxMX0RDVCAqLwogCisvKiBJZ25vcmluZyBvdmVyZmxvd3MgYXMgaWRjdCBmdW5jdGlvbiBleHBlY3RzIGFuZCB1c2VzIG92ZXJmbG93cyAqLworX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikpKQogdm9pZCBpZGN0X2NvbChTaG9ydCAqYmxrKQogewogICAgIGludDMyIHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeDg7CkBAIC0zNjgsNiArMzgwLDggQEAKICAgICByZXR1cm47CiB9CiAKKy8qIElnbm9yaW5nIG92ZXJmbG93cyBhcyBpZGN0IGZ1bmN0aW9uIGV4cGVjdHMgYW5kIHVzZXMgb3ZlcmZsb3dzICovCitfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZSgic2lnbmVkLWludGVnZXItb3ZlcmZsb3ciKSkpCiB2b2lkIGlkY3Rfcm93MkludGVyKFNob3J0ICpibGssIFVDaGFyICpyZWMsIEludCBseCkKIHsKICAgICBpbnQzMiB4MCwgeDEsIHgyLCB4NCwgeDU7CkBAIC00MjcsNiArNDQxLDggQEAKICAgICByZXR1cm4gOwogfQogCisvKiBJZ25vcmluZyBvdmVyZmxvd3MgYXMgaWRjdCBmdW5jdGlvbiBleHBlY3RzIGFuZCB1c2VzIG92ZXJmbG93cyAqLworX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikpKQogdm9pZCBpZGN0X3JvdzNJbnRlcihTaG9ydCAqYmxrLCBVQ2hhciAqcmVjLCBJbnQgbHgpCiB7CiAgICAgaW50MzIgeDAsIHgxLCB4MiwgeDMsIHg0LCB4NSwgeDYsIHg3LCB4ODsKQEAgLTQ5Nyw2ICs1MTMsOCBAQAogICAgIHJldHVybiA7CiB9CiAKKy8qIElnbm9yaW5nIG92ZXJmbG93cyBhcyBpZGN0IGZ1bmN0aW9uIGV4cGVjdHMgYW5kIHVzZXMgb3ZlcmZsb3dzICovCitfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZSgic2lnbmVkLWludGVnZXItb3ZlcmZsb3ciKSkpCiB2b2lkIGlkY3Rfcm93NEludGVyKFNob3J0ICpibGssIFVDaGFyICpyZWMsIEludCBseCkKIHsKICAgICBpbnQzMiB4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHg4OwpAQCAtNTczLDYgKzU5MSw4IEBACiB9CiAKICNpZm5kZWYgU01BTExfRENUCisvKiBJZ25vcmluZyBvdmVyZmxvd3MgYXMgaWRjdCBmdW5jdGlvbiBleHBlY3RzIGFuZCB1c2VzIG92ZXJmbG93cyAqLworX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikpKQogdm9pZCBpZGN0X3JvdzB4NDBJbnRlcihTaG9ydCAqYmxrLCBVQ2hhciAqcmVjLCBJbnQgbHgpCiB7CiAgICAgaW50MzIgeDEsIHgyLCB4NCwgeDU7CkBAIC02ODYsNiArNzA2LDggQEAKICAgICByZXR1cm4gOwogfQogCisvKiBJZ25vcmluZyBvdmVyZmxvd3MgYXMgaWRjdCBmdW5jdGlvbiBleHBlY3RzIGFuZCB1c2VzIG92ZXJmbG93cyAqLworX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikpKQogdm9pZCBpZGN0X3JvdzB4MTBJbnRlcihTaG9ydCAqYmxrLCBVQ2hhciAqcmVjLCBJbnQgbHgpCiB7CiAgICAgaW50MzIgeDEsIHgzLCB4NSwgeDc7CkBAIC03NDEsNiArNzYzLDggQEAKIAogI2VuZGlmIC8qIFNNQUxMX0RDVCAqLwogCisvKiBJZ25vcmluZyBvdmVyZmxvd3MgYXMgaWRjdCBmdW5jdGlvbiBleHBlY3RzIGFuZCB1c2VzIG92ZXJmbG93cyAqLworX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikpKQogdm9pZCBpZGN0X3Jvd0ludGVyKFNob3J0ICpibGssIFVDaGFyICpyZWMsIEludCBseCkKIHsKICAgICBpbnQzMiB4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHg4OwpAQCAtODY0LDYgKzg4OCw4IEBACiAgICAgcmV0dXJuOwogfQogCisvKiBJZ25vcmluZyBvdmVyZmxvd3MgYXMgaWRjdCBmdW5jdGlvbiBleHBlY3RzIGFuZCB1c2VzIG92ZXJmbG93cyAqLworX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikpKQogdm9pZCBpZGN0X3JvdzJJbnRyYShTaG9ydCAqYmxrLCBVQ2hhciAqcmVjLCBJbnQgbHgpCiB7CiAgICAgaW50MzIgeDAsIHgxLCB4MiwgeDQsIHg1OwpAQCAtOTE5LDYgKzk0NSw4IEBACiAgICAgcmV0dXJuIDsKIH0KIAorLyogSWdub3Jpbmcgb3ZlcmZsb3dzIGFzIGlkY3QgZnVuY3Rpb24gZXhwZWN0cyBhbmQgdXNlcyBvdmVyZmxvd3MgKi8KK19fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkKIHZvaWQgaWRjdF9yb3czSW50cmEoU2hvcnQgKmJsaywgVUNoYXIgKnJlYywgSW50IGx4KQogewogICAgIGludDMyIHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeDg7CkBAIC05ODUsNiArMTAxMyw4IEBACiAgICAgcmV0dXJuIDsKIH0KIAorLyogSWdub3Jpbmcgb3ZlcmZsb3dzIGFzIGlkY3QgZnVuY3Rpb24gZXhwZWN0cyBhbmQgdXNlcyBvdmVyZmxvd3MgKi8KK19fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkKIHZvaWQgaWRjdF9yb3c0SW50cmEoU2hvcnQgKmJsaywgVUNoYXIgKnJlYywgSW50IGx4KQogewogICAgIGludDMyIHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeDg7CkBAIC0xMDU4LDYgKzEwODgsOCBAQAogfQogCiAjaWZuZGVmIFNNQUxMX0RDVAorLyogSWdub3Jpbmcgb3ZlcmZsb3dzIGFzIGlkY3QgZnVuY3Rpb24gZXhwZWN0cyBhbmQgdXNlcyBvdmVyZmxvd3MgKi8KK19fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkKIHZvaWQgaWRjdF9yb3cweDQwSW50cmEoU2hvcnQgKmJsaywgVUNoYXIgKnJlYywgSW50IGx4KQogewogICAgIGludDMyICB4MSwgeDIsIHg0LCB4NTsKQEAgLTExNjYsNiArMTE5OCw4IEBACiAgICAgcmV0dXJuIDsKIH0KIAorLyogSWdub3Jpbmcgb3ZlcmZsb3dzIGFzIGlkY3QgZnVuY3Rpb24gZXhwZWN0cyBhbmQgdXNlcyBvdmVyZmxvd3MgKi8KK19fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkKIHZvaWQgaWRjdF9yb3cweDEwSW50cmEoU2hvcnQgKmJsaywgVUNoYXIgKnJlYywgSW50IGx4KQogewogICAgIGludDMyIHgxLCB4MywgeDUsIHg3OwpAQCAtMTIxOCw2ICsxMjUyLDggQEAKIH0KIAogI2VuZGlmIC8qIFNNQUxMX0RDVCAqLworLyogSWdub3Jpbmcgb3ZlcmZsb3dzIGFzIGlkY3QgZnVuY3Rpb24gZXhwZWN0cyBhbmQgdXNlcyBvdmVyZmxvd3MgKi8KK19fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkKIHZvaWQgaWRjdF9yb3dJbnRyYShTaG9ydCAqYmxrLCBVQ2hhciAqcmVjLCBJbnQgbHgpCiB7CiAgICAgaW50MzIgeDAsIHgxLCB4MiwgeDMsIHg0LCB4NSwgeDYsIHg3LCB4ODsKQEAgLTEzNjQsNiArMTQwMCw4IEBACiAgICAgcmV0dXJuOwogfQogCisvKiBJZ25vcmluZyBvdmVyZmxvd3MgYXMgaWRjdCBmdW5jdGlvbiBleHBlY3RzIGFuZCB1c2VzIG92ZXJmbG93cyAqLworX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikpKQogdm9pZCBpZGN0X3JvdzJ6bXYoU2hvcnQgKmJsaywgVUNoYXIgKnJlYywgVUNoYXIgKnByZWQsIEludCBseCkKIHsKICAgICBpbnQzMiB4MCwgeDEsIHgyLCB4NCwgeDU7CkBAIC0xNDI0LDYgKzE0NjIsOCBAQAogICAgIHJldHVybiA7CiB9CiAKKy8qIElnbm9yaW5nIG92ZXJmbG93cyBhcyBpZGN0IGZ1bmN0aW9uIGV4cGVjdHMgYW5kIHVzZXMgb3ZlcmZsb3dzICovCitfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZSgic2lnbmVkLWludGVnZXItb3ZlcmZsb3ciKSkpCiB2b2lkIGlkY3Rfcm93M3ptdihTaG9ydCAqYmxrLCBVQ2hhciAqcmVjLCBVQ2hhciAqcHJlZCwgSW50IGx4KQogewogICAgIGludDMyIHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeDg7CkBAIC0xNDk1LDYgKzE1MzUsOCBAQAogICAgIHJldHVybiA7CiB9CiAKKy8qIElnbm9yaW5nIG92ZXJmbG93cyBhcyBpZGN0IGZ1bmN0aW9uIGV4cGVjdHMgYW5kIHVzZXMgb3ZlcmZsb3dzICovCitfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZSgic2lnbmVkLWludGVnZXItb3ZlcmZsb3ciKSkpCiB2b2lkIGlkY3Rfcm93NHptdihTaG9ydCAqYmxrLCBVQ2hhciAqcmVjLCBVQ2hhciAqcHJlZCwgSW50IGx4KQogewogICAgIGludDMyIHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeDg7CkBAIC0xNTcyLDYgKzE2MTQsOCBAQAogfQogCiAjaWZuZGVmIFNNQUxMX0RDVAorLyogSWdub3Jpbmcgb3ZlcmZsb3dzIGFzIGlkY3QgZnVuY3Rpb24gZXhwZWN0cyBhbmQgdXNlcyBvdmVyZmxvd3MgKi8KK19fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkKIHZvaWQgaWRjdF9yb3cweDQwem12KFNob3J0ICpibGssIFVDaGFyICpyZWMsIFVDaGFyICpwcmVkLCBJbnQgbHgpCiB7CiAgICAgaW50MzIgeDEsIHgyLCB4NCwgeDU7CkBAIC0xNjg3LDYgKzE3MzEsOCBAQAogICAgIHJldHVybiA7CiB9CiAKKy8qIElnbm9yaW5nIG92ZXJmbG93cyBhcyBpZGN0IGZ1bmN0aW9uIGV4cGVjdHMgYW5kIHVzZXMgb3ZlcmZsb3dzICovCitfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZSgic2lnbmVkLWludGVnZXItb3ZlcmZsb3ciKSkpCiB2b2lkIGlkY3Rfcm93MHgxMHptdihTaG9ydCAqYmxrLCBVQ2hhciAqcmVjLCBVQ2hhciAqcHJlZCwgSW50IGx4KQogewogICAgIGludDMyIHgxLCB4MywgeDUsIHg3OwpAQCAtMTc0Myw2ICsxNzg5LDggQEAKIAogI2VuZGlmIC8qIFNNQUxMX0RDVCAqLwogCisvKiBJZ25vcmluZyBvdmVyZmxvd3MgYXMgaWRjdCBmdW5jdGlvbiBleHBlY3RzIGFuZCB1c2VzIG92ZXJmbG93cyAqLworX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikpKQogdm9pZCBpZGN0X3Jvd3ptdihTaG9ydCAqYmxrLCBVQ2hhciAqcmVjLCBVQ2hhciAqcHJlZCwgSW50IGx4KQogewogICAgIGludDMyIHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeDg7CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlY3MvbTR2X2gyNjMvZW5jL3NyYy9tcDRlbmNfYXBpLmNwcCBiL21lZGlhL2NvZGVjcy9tNHZfaDI2My9lbmMvc3JjL21wNGVuY19hcGkuY3BwCmluZGV4IDAwYjJhYjYuLmIyOTUyNTggMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjcy9tNHZfaDI2My9lbmMvc3JjL21wNGVuY19hcGkuY3BwCisrKyBiL21lZGlhL2NvZGVjcy9tNHZfaDI2My9lbmMvc3JjL21wNGVuY19hcGkuY3BwCkBAIC01MDEsMTMgKzUwMSwxNiBAQAogICAgIC8qIGNoZWNrIGZyYW1lIHJhdGUgKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgZW5jUGFyYW1zLT5uTGF5ZXJzOyBpKyspCiAgICAgeworICAgICAgICBpZiAoZW5jT3B0aW9uLT5lbmNGcmFtZVJhdGVbaV0gPD0gMC4gfHwgZW5jT3B0aW9uLT5lbmNGcmFtZVJhdGVbaV0gPiAxMjApCisgICAgICAgIHsKKyAgICAgICAgICAgIGdvdG8gQ0xFQU5fVVA7CisgICAgICAgIH0KICAgICAgICAgZW5jUGFyYW1zLT5MYXllckZyYW1lUmF0ZVtpXSA9IGVuY09wdGlvbi0+ZW5jRnJhbWVSYXRlW2ldOwogICAgIH0KIAogICAgIGlmIChlbmNQYXJhbXMtPm5MYXllcnMgPiAxKQogICAgIHsKLSAgICAgICAgaWYgKGVuY09wdGlvbi0+ZW5jRnJhbWVSYXRlWzBdID09IGVuY09wdGlvbi0+ZW5jRnJhbWVSYXRlWzFdIHx8Ci0gICAgICAgICAgICAgICAgZW5jT3B0aW9uLT5lbmNGcmFtZVJhdGVbMF0gPT0gMC4gfHwgZW5jT3B0aW9uLT5lbmNGcmFtZVJhdGVbMV0gPT0gMC4pIC8qIDcvMzEvMDMgKi8KKyAgICAgICAgaWYgKGVuY09wdGlvbi0+ZW5jRnJhbWVSYXRlWzBdID09IGVuY09wdGlvbi0+ZW5jRnJhbWVSYXRlWzFdKQogICAgICAgICAgICAgZ290byBDTEVBTl9VUDsKICAgICB9CiAgICAgLyogc2V0IG1heCBmcmFtZSByYXRlICovCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlY3MvbTR2X2gyNjMvZnV6emVyL21wZWc0X2gyNjNfZGVjX2Z1enplci5jcHAgYi9tZWRpYS9jb2RlY3MvbTR2X2gyNjMvZnV6emVyL21wZWc0X2gyNjNfZGVjX2Z1enplci5jcHAKaW5kZXggOTEyYzgyMS4uNWU2MTNkOSAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWNzL200dl9oMjYzL2Z1enplci9tcGVnNF9oMjYzX2RlY19mdXp6ZXIuY3BwCisrKyBiL21lZGlhL2NvZGVjcy9tNHZfaDI2My9mdXp6ZXIvbXBlZzRfaDI2M19kZWNfZnV6emVyLmNwcApAQCAtNTAsNyArNTAsNyBAQAogCiAgcHJpdmF0ZToKICAgdGFndmlkZW9EZWNDb250cm9scyAqbURlY0hhbmRsZSA9IG51bGxwdHI7Ci0gIHVpbnQ4X3QgKm1PdXRwdXRCdWZmZXJba051bU91dHB1dEJ1ZmZlcnNdOworICB1aW50OF90ICptT3V0cHV0QnVmZmVyW2tOdW1PdXRwdXRCdWZmZXJzXSA9IHt9OwogICBib29sIG1Jbml0aWFsaXplZCA9IGZhbHNlOwogICBib29sIG1GcmFtZXNDb25maWd1cmVkID0gZmFsc2U7CiAjaWZkZWYgTVBFRzQKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjcy9tcDNkZWMvc3JjL3B2bXAzX3N0ZXJlb19wcm9jLmNwcCBiL21lZGlhL2NvZGVjcy9tcDNkZWMvc3JjL3B2bXAzX3N0ZXJlb19wcm9jLmNwcAppbmRleCA0MzM4YzQzLi5jMDRmN2YzIDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlY3MvbXAzZGVjL3NyYy9wdm1wM19zdGVyZW9fcHJvYy5jcHAKKysrIGIvbWVkaWEvY29kZWNzL21wM2RlYy9zcmMvcHZtcDNfc3RlcmVvX3Byb2MuY3BwCkBAIC0yMTksNiArMjE5LDkgQEAKIDsgRlVOQ1RJT04gQ09ERQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKyNpZiBfX2hhc19hdHRyaWJ1dGUobm9fc2FuaXRpemUpCitfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZSgiaW50ZWdlciIpKSkKKyNlbmRpZgogdm9pZCBwdm1wM19zdF9pbnRlbnNpdHkoaW50MzIgeHJbU1VCQkFORFNfTlVNQkVSKkZJTFRFUkJBTktfQkFORFNdLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgeGxbU1VCQkFORFNfTlVNQkVSKkZJTFRFUkJBTktfQkFORFNdLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgaXNfcG9zLApkaWZmIC0tZ2l0IGEvbWVkaWEvZXh0cmFjdG9ycy90ZXN0cy9BbmRyb2lkLmJwIGIvbWVkaWEvZXh0cmFjdG9ycy90ZXN0cy9BbmRyb2lkLmJwCmluZGV4IDVkOTdkOWEuLjIzYzc0ZjcgMTAwNjQ0Ci0tLSBhL21lZGlhL2V4dHJhY3RvcnMvdGVzdHMvQW5kcm9pZC5icAorKysgYi9tZWRpYS9leHRyYWN0b3JzL3Rlc3RzL0FuZHJvaWQuYnAKQEAgLTQ1LDE0ICs0NSwxMSBAQAogICAgICAgICAibGliZGF0YXNvdXJjZSIsCiAgICAgICAgICJsaWJ3YXRjaGRvZyIsCiAKLSAgICAgICAgImxpYnN0YWdlZnJpZ2h0IiwKICAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2lkMyIsCiAgICAgICAgICJsaWJzdGFnZWZyaWdodF9mbGFjZGVjIiwKICAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2VzZHMiLAogICAgICAgICAibGlic3RhZ2VmcmlnaHRfbXBlZzJzdXBwb3J0IiwKLSAgICAgICAgImxpYnN0YWdlZnJpZ2h0X21wZWcyZXh0cmFjdG9yIiwKICAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb25fY29sb3J1dGlsc19uZGsiLAotICAgICAgICAibGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiIsCiAgICAgICAgICJsaWJzdGFnZWZyaWdodF9tZXRhZGF0YXV0aWxzIiwKIAogICAgICAgICAibGlibWVkaWFfbWlkaWlvd3JhcHBlciIsCkBAIC03NCw2ICs3MSw4IEBACiAgICAgICAgICJsaWJjdXRpbHMiLAogICAgICAgICAibGlibWVkaWFuZGsiLAogICAgICAgICAibGlibWVkaWEiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHQiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiIsCiAgICAgICAgICJsaWJjcnlwdG8iLAogICAgICAgICAibGliaGlkbG1lbW9yeSIsCiAgICAgICAgICJsaWJoaWRsYmFzZSIsCmRpZmYgLS1naXQgYS9tZWRpYS9qYW5pdG9ycy9yZWxpYWJpbGl0eV9tYWlubGluZV9PV05FUlMgYi9tZWRpYS9qYW5pdG9ycy9yZWxpYWJpbGl0eV9tYWlubGluZV9PV05FUlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRjNGZjMgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2phbml0b3JzL3JlbGlhYmlsaXR5X21haW5saW5lX09XTkVSUwpAQCAtMCwwICsxLDUgQEAKKyMgQnVnIGNvbXBvbmVudDogMTA1MTMwOQorIyBnby9hbmRyb2lkLW1lZGlhLXJlbGFpYmlsaXR5CisKK2Vzc2lja0Bnb29nbGUuY29tCituY2hhbGtvQGdvb2dsZS5jb20KZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvY2xpZW50L0FuZHJvaWQuYnAgYi9tZWRpYS9saWJhdWRpb2NsaWVudC9BbmRyb2lkLmJwCmluZGV4IDNjM2QzNDAuLjBmYWUwODAgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmF1ZGlvY2xpZW50L0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvbGliYXVkaW9jbGllbnQvQW5kcm9pZC5icApAQCAtMTM2LDYgKzEzNiw3IEBACiAgICAgICAgICJsaWJ1dGlscyIsCiAgICAgICAgICJsaWJ2aWJyYXRvciIsCiAgICAgICAgICJmcmFtZXdvcmstcGVybWlzc2lvbi1haWRsLWNwcCIsCisgICAgICAgICJwYWNrYWdlbWFuYWdlcl9haWRsLWNwcCIsCiAgICAgXSwKICAgICBleHBvcnRfc2hhcmVkX2xpYl9oZWFkZXJzOiBbCiAgICAgICAgICJhdWRpb2ZsaW5nZXItYWlkbC1jcHAiLApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvRmFjdG9yeUhhbEhpZGwuY3BwIGIvbWVkaWEvbGliYXVkaW9oYWwvRmFjdG9yeUhhbEhpZGwuY3BwCmluZGV4IGU0MjBkMDcuLmMxOWQyYzIgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmF1ZGlvaGFsL0ZhY3RvcnlIYWxIaWRsLmNwcAorKysgYi9tZWRpYS9saWJhdWRpb2hhbC9GYWN0b3J5SGFsSGlkbC5jcHAKQEAgLTk0LDcgKzk0LDcgQEAKIH0gIC8vIG5hbWVzcGFjZQogCiB2b2lkKiBjcmVhdGVQcmVmZXJyZWRJbXBsKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYWNrYWdlLCBjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlKSB7Ci0gICAgZm9yIChhdXRvIHZlcnNpb24gPSBkZXRhaWw6OnNBdWRpb0hBTFZlcnNpb25zOyB2ZXJzaW9uICE9IG51bGxwdHI7ICsrdmVyc2lvbikgeworICAgIGZvciAoYXV0byB2ZXJzaW9uID0gZGV0YWlsOjpzQXVkaW9IQUxWZXJzaW9uczsgKnZlcnNpb24gIT0gbnVsbHB0cjsgKyt2ZXJzaW9uKSB7CiAgICAgICAgIHZvaWQqIHJhd0ludGVyZmFjZSA9IG51bGxwdHI7CiAgICAgICAgIGlmIChoYXNIYWxTZXJ2aWNlKHBhY2thZ2UsICp2ZXJzaW9uLCBpbnRlcmZhY2UpCiAgICAgICAgICAgICAgICAgJiYgY3JlYXRlSGFsU2VydmljZSgqdmVyc2lvbiwgaW50ZXJmYWNlLCAmcmF3SW50ZXJmYWNlKSkgewpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliZWZmZWN0cy9sdm0vbGliL0VxL3NyYy9MVkVRTkJfQ29udHJvbC5jcHAgYi9tZWRpYS9saWJlZmZlY3RzL2x2bS9saWIvRXEvc3JjL0xWRVFOQl9Db250cm9sLmNwcAppbmRleCAxZWFkZDI3Li5jY2VmNWFiIDEwMDY0NAotLS0gYS9tZWRpYS9saWJlZmZlY3RzL2x2bS9saWIvRXEvc3JjL0xWRVFOQl9Db250cm9sLmNwcAorKysgYi9tZWRpYS9saWJlZmZlY3RzL2x2bS9saWIvRXEvc3JjL0xWRVFOQl9Db250cm9sLmNwcApAQCAtMTM1LDcgKzEzNSw2IEBACiAgICAgTFZNX1VJTlQzMiBmcyA9CiAgICAgICAgICAgICAoTFZNX1VJTlQzMilMVkVRTkJfU2FtcGxlUmF0ZVRhYlsoTFZNX1VJTlQxNilwUGFyYW1zLT5TYW1wbGVSYXRlXTsgLyogU2FtcGxlIHJhdGUgKi8KICAgICBMVk1fVUlOVDMyIGZjOyAgICAgLyogRmlsdGVyIGNlbnRyZSBmcmVxdWVuY3kgKi8KLSAgICBMVk1fSU5UMTYgUUZhY3RvcjsgLyogRmlsdGVyIFEgZmFjdG9yICovCiAKICAgICBwSW5zdGFuY2UtPk5CYW5kcyA9IHBQYXJhbXMtPk5CYW5kczsKIApAQCAtMTQ0LDcgKzE0Myw2IEBACiAgICAgICAgICAqIEdldCB0aGUgZmlsdGVyIHNldHRpbmdzCiAgICAgICAgICAqLwogICAgICAgICBmYyA9IChMVk1fVUlOVDMyKXBQYXJhbXMtPnBCYW5kRGVmaW5pdGlvbltpXS5GcmVxdWVuY3k7IC8qIEdldCB0aGUgYmFuZCBjZW50cmUgZnJlcXVlbmN5ICovCi0gICAgICAgIFFGYWN0b3IgPSAoTFZNX0lOVDE2KXBQYXJhbXMtPnBCYW5kRGVmaW5pdGlvbltpXS5RRmFjdG9yOyAvKiBHZXQgdGhlIGJhbmQgUSBmYWN0b3IgKi8KIAogICAgICAgICBwSW5zdGFuY2UtPnBCaXF1YWRUeXBlW2ldID0gTFZFUU5CX1NpbmdsZVByZWNpc2lvbl9GbG9hdDsgLyogRGVmYXVsdCB0byBzaW5nbGUgcHJlY2lzaW9uICovCiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmVmZmVjdHMvbHZtL2xpYi9TcGVjdHJ1bUFuYWx5emVyL3NyYy9MVlBTQV9Db250cm9sLmNwcCBiL21lZGlhL2xpYmVmZmVjdHMvbHZtL2xpYi9TcGVjdHJ1bUFuYWx5emVyL3NyYy9MVlBTQV9Db250cm9sLmNwcAppbmRleCA4ZTYzNTAyLi5mZmVkNmQ0IDEwMDY0NAotLS0gYS9tZWRpYS9saWJlZmZlY3RzL2x2bS9saWIvU3BlY3RydW1BbmFseXplci9zcmMvTFZQU0FfQ29udHJvbC5jcHAKKysrIGIvbWVkaWEvbGliZWZmZWN0cy9sdm0vbGliL1NwZWN0cnVtQW5hbHl6ZXIvc3JjL0xWUFNBX0NvbnRyb2wuY3BwCkBAIC00MjEsNyArNDIxLDYgQEAKICAgICAgKiBJbnRlcm1lZGlhdGUgdmFyaWFibGVzIGFuZCB0ZW1wb3JhcnkgdmFsdWVzCiAgICAgICovCiAgICAgTFZNX0ZMT0FUIFQwOwotICAgIExWTV9GTE9BVCBEOwogICAgIExWTV9GTE9BVCBBMDsKICAgICBMVk1fRkxPQVQgQjE7CiAgICAgTFZNX0ZMT0FUIEIyOwpAQCAtNDQ0LDkgKzQ0Myw2IEBACiAgICAgICogQ2FsY3VsYXRpbmcgdGhlIGludGVybWVkaWF0ZSB2YWx1ZXMKICAgICAgKi8KICAgICBUMCA9IEZyZXF1ZW5jeSAqIExWUFNBX0Zsb2F0X1R3b1BpT25Gc1RhYmxlW0ZzXTsgLyogVDAgPSAyICogUGkgKiBGYyAvIEZzICovCi0gICAgRCA9IDMyMDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsb2F0aW5nIHBvaW50IHZhbHVlIDEuMDAwMDAwICgxKjEwMCoyXjUpICovCi0gICAgLyogRm9yY2UgRCA9IDEgOiB0aGUgZnVuY3Rpb24gd2FzIG9yaWdpbmFsbHkgdXNlZCBmb3IgYSBwZWFraW5nIGZpbHRlci4KLSAgICAgICBUaGUgRCBwYXJhbWV0ZXIgZG8gbm90IGV4aXN0IGZvciBhIEJhbmRQYXNzIGZpbHRlciBjb2VmZmljaWVudHMgKi8KIAogICAgIC8qCiAgICAgICogQ2FsY3VsYXRlIHRoZSBCMiBjb2VmZmljaWVudApAQCAtNTM1LDcgKzUzMSw2IEBACiAgICAgICogSW50ZXJtZWRpYXRlIHZhcmlhYmxlcyBhbmQgdGVtcG9yYXJ5IHZhbHVlcwogICAgICAqLwogICAgIExWTV9GTE9BVCBUMDsKLSAgICBMVk1fRkxPQVQgRDsKICAgICBMVk1fRkxPQVQgQTA7CiAgICAgTFZNX0ZMT0FUIEIxOwogICAgIExWTV9GTE9BVCBCMjsKQEAgLTU1OCw5ICs1NTMsNiBAQAogICAgICAqIENhbGN1bGF0aW5nIHRoZSBpbnRlcm1lZGlhdGUgdmFsdWVzCiAgICAgICovCiAgICAgVDAgPSBGcmVxdWVuY3kgKiBMVlBTQV9GbG9hdF9Ud29QaU9uRnNUYWJsZVtGc107IC8qIFQwID0gMiAqIFBpICogRmMgLyBGcyAqLwotICAgIEQgPSAzMjAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbG9hdGluZyBwb2ludCB2YWx1ZSAxLjAwMDAwMCAoMSoxMDAqMl41KSAqLwotICAgIC8qIEZvcmNlIEQgPSAxIDogdGhlIGZ1bmN0aW9uIHdhcyBvcmlnaW5hbGx5IHVzZWQgZm9yIGEgcGVha2luZyBmaWx0ZXIuCi0gICAgICAgVGhlIEQgcGFyYW1ldGVyIGRvIG5vdCBleGlzdCBmb3IgYSBCYW5kUGFzcyBmaWx0ZXIgY29lZmZpY2llbnRzICovCiAKICAgICAvKgogICAgICAqIENhbGN1bGF0ZSB0aGUgQjIgY29lZmZpY2llbnQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmVmZmVjdHMvcHJlcHJvY2Vzc2luZy8uY2xhbmctZm9ybWF0IGIvbWVkaWEvbGliZWZmZWN0cy9wcmVwcm9jZXNzaW5nLy5jbGFuZy1mb3JtYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IGYxYjRmNjkuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliZWZmZWN0cy9wcmVwcm9jZXNzaW5nLy5jbGFuZy1mb3JtYXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uLi8uLi8uLi8uLi8uLi9idWlsZC9zb29uZy9zY3JpcHRzL3N5c3RlbS1jbGFuZy1mb3JtYXQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZWRpYS9saWJlZmZlY3RzL3ByZXByb2Nlc3NpbmcvdGVzdHMvY29ycmVsYXRpb24uY3BwIGIvbWVkaWEvbGliZWZmZWN0cy9wcmVwcm9jZXNzaW5nL3Rlc3RzL2NvcnJlbGF0aW9uLmNwcAppbmRleCBlYjU2ZmMzLi4wODUzNjczIDEwMDY0NAotLS0gYS9tZWRpYS9saWJlZmZlY3RzL3ByZXByb2Nlc3NpbmcvdGVzdHMvY29ycmVsYXRpb24uY3BwCisrKyBiL21lZGlhL2xpYmVmZmVjdHMvcHJlcHJvY2Vzc2luZy90ZXN0cy9jb3JyZWxhdGlvbi5jcHAKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQxNl90KiBzaWdZLCBpbnQgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3QgZW5hYmxlQ3Jvc3NDb3JyKSB7CiAgICAgZmxvYXQgbWF4Q29yclZhbCA9IDAuZiwgcHJldkNvcnJWYWwgPSAwLmY7Ci0gICAgaW50IGRlbGF5ID0gMCwgcGVha0luZGV4ID0gMCwgZmxhZyA9IDA7CisgICAgaW50IHBlYWtJbmRleCA9IDAsIGZsYWcgPSAwOwogICAgIGludCBsb29wTGltID0gKDEgPT0gZW5hYmxlQ3Jvc3NDb3JyKSA/IGxlbiA6IGtNaW5Mb29wTGltaXRWYWx1ZTsKICAgICBzdGQ6OnZlY3RvcjxpbnQ+IHBlYWtJbmRleFZlY3Qoa051bVBlYWtzLCAwKTsKICAgICBzdGQ6OnZlY3RvcjxmbG9hdD4gcGVha1ZhbHVlVmVjdChrTnVtUGVha3MsIDAuZik7CkBAIC00Nyw3ICs0Nyw2IEBACiAgICAgICAgIH0KICAgICAgICAgY29yclZhbCAvPSBsZW4gLSBpOwogICAgICAgICBpZiAoY29yclZhbCA+IG1heENvcnJWYWwpIHsKLSAgICAgICAgICAgIGRlbGF5ID0gaTsKICAgICAgICAgICAgIG1heENvcnJWYWwgPSBjb3JyVmFsOwogICAgICAgICB9CiAgICAgICAgIC8vIENvcnJlbGF0aW9uIHBlYWtzIGFyZSBleHBlY3RlZCB0byBiZSBvYnNlcnZlZCBhdCBlcXVhbCBpbnRlcnZhbHMuIFRoZSBpbnRlcnZhbCBsZW5ndGggaXMKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmhlaWYvSGVpZkRlY29kZXJJbXBsLmNwcCBiL21lZGlhL2xpYmhlaWYvSGVpZkRlY29kZXJJbXBsLmNwcAppbmRleCAyNzNkOTFjLi5mY2FjNTUxIDEwMDY0NAotLS0gYS9tZWRpYS9saWJoZWlmL0hlaWZEZWNvZGVySW1wbC5jcHAKKysrIGIvbWVkaWEvbGliaGVpZi9IZWlmRGVjb2RlckltcGwuY3BwCkBAIC0xNSw2ICsxNSw3IEBACiAgKi8KIAogLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2luY2x1ZGUgImluY2x1ZGUvSGVpZkRlY29kZXJBUEkuaCIKICNkZWZpbmUgTE9HX1RBRyAiSGVpZkRlY29kZXJJbXBsIgogCiAjaW5jbHVkZSAiSGVpZkRlY29kZXJJbXBsLmgiCkBAIC00NjQsNyArNDY1LDcgQEAKIH0KIAogYm9vbCBIZWlmRGVjb2RlckltcGw6OnNldE91dHB1dENvbG9yKEhlaWZDb2xvckZvcm1hdCBoZWlmQ29sb3IpIHsKLSAgICBpZiAoaGVpZkNvbG9yID09IG1PdXRwdXRDb2xvcikgeworICAgIGlmIChoZWlmQ29sb3IgPT0gKEhlaWZDb2xvckZvcm1hdCltT3V0cHV0Q29sb3IpIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9BbmRyb2lkLmJwIGIvbWVkaWEvbGlibWVkaWEvQW5kcm9pZC5icAppbmRleCBlOThkN2Q4Li45YzFiNTYzIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYS9BbmRyb2lkLmJwCisrKyBiL21lZGlhL2xpYm1lZGlhL0FuZHJvaWQuYnAKQEAgLTM3OCwxMiArMzc4LDEyIEBACiAgICAgXSwKIAogICAgIHN0YXRpY19saWJzOiBbCi0gICAgICAgICJyZXNvdXJjZW1hbmFnZXJfYWlkbF9pbnRlcmZhY2UtbmRrX3BsYXRmb3JtIiwKKyAgICAgICAgInJlc291cmNlbWFuYWdlcl9haWRsX2ludGVyZmFjZS1uZGsiLAogICAgICAgICAiZnJhbWV3b3JrLXBlcm1pc3Npb24tYWlkbC1jcHAiLAogICAgIF0sCiAKICAgICBleHBvcnRfc3RhdGljX2xpYl9oZWFkZXJzOiBbCi0gICAgICAgICJyZXNvdXJjZW1hbmFnZXJfYWlkbF9pbnRlcmZhY2UtbmRrX3BsYXRmb3JtIiwKKyAgICAgICAgInJlc291cmNlbWFuYWdlcl9haWRsX2ludGVyZmFjZS1uZGsiLAogICAgICAgICAiZnJhbWV3b3JrLXBlcm1pc3Npb24tYWlkbC1jcHAiLAogICAgIF0sCiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhL3hzZC92dHMvT1dORVJTIGIvbWVkaWEvbGlibWVkaWEveHNkL3Z0cy9PV05FUlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFmMmViYQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYm1lZGlhL3hzZC92dHMvT1dORVJTCkBAIC0wLDAgKzEsMiBAQAorIyBCdWcgY29tcG9uZW50OiAxNTE4NjIKK3N1bmRvbmdhaG5AZ29vZ2xlLmNvbQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL0FuZHJvaWQuYnAgYi9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvQW5kcm9pZC5icAppbmRleCBmNTU2NzhkLi5jNDE2YTUxIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvQW5kcm9pZC5icAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvQW5kcm9pZC5icApAQCAtNjUsNiArNjUsNyBAQAogICAgICAgICAibGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiIsCiAgICAgICAgICJsaWJzdGFnZWZyaWdodF9odHRwbGl2ZSIsCiAgICAgICAgICJsaWJ1dGlscyIsCisgICAgICAgICJwYWNrYWdlbWFuYWdlcl9haWRsLWNwcCIsCiAgICAgXSwKIAogICAgIGhlYWRlcl9saWJzOiBbCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvdGVzdHMvQW5kcm9pZC5icCBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS90ZXN0cy9BbmRyb2lkLmJwCmluZGV4IDk4NjI2ZmQuLjk5MjAyYjggMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS90ZXN0cy9BbmRyb2lkLmJwCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS90ZXN0cy9BbmRyb2lkLmJwCkBAIC0zMCw3ICszMCw3IEBACiAgICAgXSwKIAogICAgIHN0YXRpY19saWJzOiBbCi0gICAgICAgICJyZXNvdXJjZW1hbmFnZXJfYWlkbF9pbnRlcmZhY2UtbmRrX3BsYXRmb3JtIiwKKyAgICAgICAgInJlc291cmNlbWFuYWdlcl9haWRsX2ludGVyZmFjZS1uZGsiLAogICAgIF0sCiAKICAgICBpbmNsdWRlX2RpcnM6IFsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhdHJhbnNjb2RpbmcvQW5kcm9pZC5icCBiL21lZGlhL2xpYm1lZGlhdHJhbnNjb2RpbmcvQW5kcm9pZC5icAppbmRleCAwNDI4NTBjLi45Mzc2NTBmIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYXRyYW5zY29kaW5nL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvbGlibWVkaWF0cmFuc2NvZGluZy9BbmRyb2lkLmJwCkBAIC0xMDYsOCArMTA2LDggQEAKICAgICBleHBvcnRfaW5jbHVkZV9kaXJzOiBbImluY2x1ZGUiXSwKIAogICAgIHN0YXRpY19saWJzOiBbCi0gICAgICAgICJtZWRpYXRyYW5zY29kaW5nX2FpZGxfaW50ZXJmYWNlLW5ka19wbGF0Zm9ybSIsCi0gICAgICAgICJyZXNvdXJjZW9ic2VydmVyX2FpZGxfaW50ZXJmYWNlLVYxLW5ka19wbGF0Zm9ybSIsCisgICAgICAgICJtZWRpYXRyYW5zY29kaW5nX2FpZGxfaW50ZXJmYWNlLW5kayIsCisgICAgICAgICJyZXNvdXJjZW9ic2VydmVyX2FpZGxfaW50ZXJmYWNlLVYxLW5kayIsCiAgICAgICAgICJsaWJzdGF0c2xvZ19tZWRpYSIsCiAgICAgXSwKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWF0cmFuc2NvZGluZy90ZXN0cy9BbmRyb2lkLmJwIGIvbWVkaWEvbGlibWVkaWF0cmFuc2NvZGluZy90ZXN0cy9BbmRyb2lkLmJwCmluZGV4IDYwMzYxMWEuLjdhNjk4MGYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhdHJhbnNjb2RpbmcvdGVzdHMvQW5kcm9pZC5icAorKysgYi9tZWRpYS9saWJtZWRpYXRyYW5zY29kaW5nL3Rlc3RzL0FuZHJvaWQuYnAKQEAgLTMxLDcgKzMxLDcgQEAKICAgICBdLAogCiAgICAgc3RhdGljX2xpYnM6IFsKLSAgICAgICAgIm1lZGlhdHJhbnNjb2RpbmdfYWlkbF9pbnRlcmZhY2UtbmRrX3BsYXRmb3JtIiwKKyAgICAgICAgIm1lZGlhdHJhbnNjb2RpbmdfYWlkbF9pbnRlcmZhY2UtbmRrIiwKICAgICAgICAgImxpYm1lZGlhdHJhbnNjb2RpbmciLAogICAgIF0sCiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0FDb2RlYy5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9BQ29kZWMuY3BwCmluZGV4IDFlNjQ1MzguLmE0ZmJiYmMgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0FDb2RlYy5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQUNvZGVjLmNwcApAQCAtMzMwNCwxMCArMzMwNCwxMiBAQAogICAgIGlmIChlcnIgIT0gT0spIHsKICAgICAgICAgQUxPR0UoIm5hdGl2ZV93aW5kb3dfc2V0X3NpZGViYW5kX3N0cmVhbSglcCkgZmFpbGVkISAoZXJyICVkKS4iLAogICAgICAgICAgICAgICAgIHNpZGViYW5kSGFuZGxlLCBlcnIpOwotICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KIAotICAgIHJldHVybiBPSzsKKyAgICBuYXRpdmVfaGFuZGxlX2Nsb3NlKHNpZGViYW5kSGFuZGxlKTsKKyAgICBuYXRpdmVfaGFuZGxlX2RlbGV0ZShzaWRlYmFuZEhhbmRsZSk7CisKKyAgICByZXR1cm4gZXJyOwogfQogCiBzdGF0dXNfdCBBQ29kZWM6OnNldFZpZGVvUG9ydEZvcm1hdFR5cGUoCkBAIC01NDMxLDYgKzU0MzMsNyBAQAogICAgICAgICAgICAgICAgICAgICBub3RpZnktPnNldEludDMyKCJjaGFubmVsLWNvdW50IiwgcGFyYW1zLm5DaGFubmVscyk7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeS0+c2V0SW50MzIoInNhbXBsZS1yYXRlIiwgcGFyYW1zLm5TYW1wbGVSYXRlKTsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5LT5zZXRJbnQzMigiYml0cmF0ZSIsIHBhcmFtcy5uQml0UmF0ZSk7CisgICAgICAgICAgICAgICAgICAgIG5vdGlmeS0+c2V0SW50MzIoImFhYy1wcm9maWxlIiwgcGFyYW1zLmVBQUNQcm9maWxlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCkBAIC05MjA1LDQgKzkyMDgsMTkgQEAKICAgICByZXR1cm4gT0s7CiB9CiAKK3N0YXR1c190IEFDb2RlYzo6cXVlcnlTdXBwb3J0ZWRQYXJhbWV0ZXJzKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAqbmFtZXMpIHsKKyAgICBpZiAoIW5hbWVzKSB7CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgQUNvZGVjOjpzdWJzY3JpYmVUb1BhcmFtZXRlcnMoW1ttYXliZV91bnVzZWRdXSBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJm5hbWVzKSB7CisgICAgcmV0dXJuIE9LOworfQorCitzdGF0dXNfdCBBQ29kZWM6OnVuc3Vic2NyaWJlRnJvbVBhcmFtZXRlcnMoW1ttYXliZV91bnVzZWRdXSBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJm5hbWVzKSB7CisgICAgcmV0dXJuIE9LOworfQorCiB9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQW5kcm9pZC5icCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0FuZHJvaWQuYnAKaW5kZXggYTA1MmE3MC4uZTQ3ZTdmZiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQW5kcm9pZC5icAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9BbmRyb2lkLmJwCkBAIC0xMDksNiArMTA5LDcgQEAKIAogICAgIHNyY3M6IFsKICAgICAgICAgIkNvZGVjQmFzZS5jcHAiLAorICAgICAgICAiRGF0YUNvbnZlcnRlci5jcHAiLAogICAgICAgICAiRnJhbWVSZW5kZXJUcmFja2VyLmNwcCIsCiAgICAgICAgICJNZWRpYUNvZGVjTGlzdFdyaXRlci5jcHAiLAogICAgICAgICAiU2tpcEN1dEJ1ZmZlci5jcHAiLApAQCAtMTI1LDYgKzEyNiw3IEBACiAgICAgXSwKIAogICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJhdWRpb3V0aWxzIiwKICAgICAgICAgImxpYmd1aSIsCiAgICAgICAgICJsaWJoaWRsYWxsb2NhdG9ydXRpbHMiLAogICAgICAgICAibGlibG9nIiwKQEAgLTI2Niw3ICsyNjgsNiBAQAogICAgICAgICAiQ2FsbGJhY2tNZWRpYVNvdXJjZS5jcHAiLAogICAgICAgICAiQ2FtZXJhU291cmNlLmNwcCIsCiAgICAgICAgICJDYW1lcmFTb3VyY2VUaW1lTGFwc2UuY3BwIiwKLSAgICAgICAgIkRhdGFDb252ZXJ0ZXIuY3BwIiwKICAgICAgICAgIkZyYW1lRGVjb2Rlci5jcHAiLAogICAgICAgICAiSGV2Y1V0aWxzLmNwcCIsCiAgICAgICAgICJJbnRlcmZhY2VVdGlscy5jcHAiLApAQCAtMzQwLDYgKzM0MSw3IEBACiAgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLm1lZGlhLm9teEAxLjAiLAogICAgICAgICAiZnJhbWV3b3JrLXBlcm1pc3Npb24tYWlkbC1jcHAiLAogICAgICAgICAibGliYXVkaW9jbGllbnRfYWlkbF9jb252ZXJzaW9uIiwKKyAgICAgICAgInBhY2thZ2VtYW5hZ2VyX2FpZGwtY3BwIiwKICAgICBdLAogCiAgICAgc3RhdGljX2xpYnM6IFsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0ZyYW1lRGVjb2Rlci5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9GcmFtZURlY29kZXIuY3BwCmluZGV4IGEyNDFlMjkuLjAxY2I5YjMgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0ZyYW1lRGVjb2Rlci5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvRnJhbWVEZWNvZGVyLmNwcApAQCAtMjYyLDEzICsyNjIsMTAgQEAKIH0KIAogYm9vbCBpc0hEUihjb25zdCBzcDxBTWVzc2FnZT4gJmZvcm1hdCkgewotICAgIHVpbnQzMl90IHN0YW5kYXJkLCByYW5nZSwgdHJhbnNmZXI7CisgICAgdWludDMyX3Qgc3RhbmRhcmQsIHRyYW5zZmVyOwogICAgIGlmICghZm9ybWF0LT5maW5kSW50MzIoImNvbG9yLXN0YW5kYXJkIiwgKGludDMyX3QqKSZzdGFuZGFyZCkpIHsKICAgICAgICAgc3RhbmRhcmQgPSAwOwogICAgIH0KLSAgICBpZiAoIWZvcm1hdC0+ZmluZEludDMyKCJjb2xvci1yYW5nZSIsIChpbnQzMl90KikmcmFuZ2UpKSB7Ci0gICAgICAgIHJhbmdlID0gMDsKLSAgICB9CiAgICAgaWYgKCFmb3JtYXQtPmZpbmRJbnQzMigiY29sb3ItdHJhbnNmZXIiLCAoaW50MzJfdCopJnRyYW5zZmVyKSkgewogICAgICAgICB0cmFuc2ZlciA9IDA7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvTWVkaWFDb2RlYy5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9NZWRpYUNvZGVjLmNwcAppbmRleCBjMDMyMzZhLi4yODUxZGM0IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9NZWRpYUNvZGVjLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9NZWRpYUNvZGVjLmNwcApAQCAtMzE4NSw4ICszMTg1LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYW1ldHJpY3Nfc2V0SW50MzIobU1ldHJpY3NIYW5kbGUsIGtDb2RlY1NlY3VyZSwgMCk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAobUlzVmlkZW8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF1ZGlvIGNvZGVjIGlzIGN1cnJlbnRseSBpZ25vcmVkLgorICAgICAgICAgICAgICAgICAgICBNZWRpYUNvZGVjSW5mbzo6QXR0cmlidXRlcyBhdHRyID0gbUNvZGVjSW5mbworICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbUNvZGVjSW5mby0+Z2V0QXR0cmlidXRlcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNZWRpYUNvZGVjSW5mbzo6QXR0cmlidXRlcygwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXR0ciAmIE1lZGlhQ29kZWNJbmZvOjprRmxhZ0lzU29mdHdhcmVPbmx5KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc29mdHdhcmUgY29kZWMgaXMgY3VycmVudGx5IGlnbm9yZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICBtUmVzb3VyY2VNYW5hZ2VyUHJveHktPmFkZFJlc291cmNlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZWRpYVJlc291cmNlOjpDb2RlY1Jlc291cmNlKG1GbGFncyAmIGtGbGFnSXNTZWN1cmUsIG1Jc1ZpZGVvKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTM1MDIsNiArMzUwNSwyMCBAQAogCiAgICAgICAgICAgICAgICAgY2FzZSBrV2hhdERyYWluVGhpc0J1ZmZlcjoKICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICgobUZsYWdzICYga0ZsYWdVc2VCbG9ja01vZGVsKSA9PSAwICYmIG1UdW5uZWxlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3A8UmVmQmFzZT4gb2JqOworICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0sobXNnLT5maW5kT2JqZWN0KCJidWZmZXIiLCAmb2JqKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzcDxNZWRpYUNvZGVjQnVmZmVyPiBidWZmZXIgPSBzdGF0aWNfY2FzdDxNZWRpYUNvZGVjQnVmZmVyICo+KG9iai5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobUZsYWdzICYga0ZsYWdJc0FzeW5jKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gYXN5bmNocm9ub3VzIG1vZGUsIG91dHB1dCBmb3JtYXQgY2hhbmdlIGlzIHByb2Nlc3NlZCBpbW1lZGlhdGVseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPdXRwdXRGb3JtYXRDaGFuZ2VJZk5lZWRlZChidWZmZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0QWN0aXZpdHlOb3RpZmljYXRpb25JZlBvc3NpYmxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBtQnVmZmVyQ2hhbm5lbC0+ZGlzY2FyZEJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICAvKiBzaXplX3QgaW5kZXggPSAqL3VwZGF0ZUJ1ZmZlcnMoa1BvcnRJbmRleE91dHB1dCwgbXNnKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAobVN0YXRlID09IEZMVVNISU5HCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9NZWRpYUNvZGVjU291cmNlLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01lZGlhQ29kZWNTb3VyY2UuY3BwCmluZGV4IDAxMDdjMzIuLmIwN2Y4ZjcgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01lZGlhQ29kZWNTb3VyY2UuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01lZGlhQ29kZWNTb3VyY2UuY3BwCkBAIC05NDMsMTAgKzk0MywxNyBAQAogCiAgICAgICAgICAgICBzcDxNZWRpYUNvZGVjQnVmZmVyPiBvdXRidWY7CiAgICAgICAgICAgICBzdGF0dXNfdCBlcnIgPSBtRW5jb2Rlci0+Z2V0T3V0cHV0QnVmZmVyKGluZGV4LCAmb3V0YnVmKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gT0sgfHwgb3V0YnVmID09IE5VTEwgfHwgb3V0YnVmLT5kYXRhKCkgPT0gTlVMTAotICAgICAgICAgICAgICAgIHx8IG91dGJ1Zi0+c2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gT0sgfHwgb3V0YnVmID09IE5VTEwgfHwgb3V0YnVmLT5kYXRhKCkgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHNpZ25hbEVPUygpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIGlmIChvdXRidWYtPnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gWmVybyBsZW5ndGggQ1NEIGJ1ZmZlcnMgYXJlIG5vdCB0cmVhdGVkIGFzIGFuIGVycm9yCisgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgTWVkaWFDb2RlYzo6QlVGRkVSX0ZMQUdfQ09ERUNDT05GSUcpIHsKKyAgICAgICAgICAgICAgICAgICAgbUVuY29kZXItPnJlbGVhc2VPdXRwdXRCdWZmZXIoaW5kZXgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNpZ25hbEVPUygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgTWVkaWFCdWZmZXJCYXNlICptYnVmID0gbmV3IE1lZGlhQnVmZmVyKG91dGJ1Zi0+c2l6ZSgpKTsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L1NraXBDdXRCdWZmZXIuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvU2tpcEN1dEJ1ZmZlci5jcHAKaW5kZXggZWU5MDE2ZC4uZGU5MTUzMyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvU2tpcEN1dEJ1ZmZlci5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvU2tpcEN1dEJ1ZmZlci5jcHAKQEAgLTE0NSw3ICsxNDUsMTkgQEAKICAgICBpZiAoYXZhaWxhYmxlIDwgbnVtKSB7CiAgICAgICAgIGludDMyX3QgbmV3Y2FwYWNpdHkgPSBtQ2FwYWNpdHkgKyAobnVtIC0gYXZhaWxhYmxlKTsKICAgICAgICAgY2hhciAqIG5ld2J1ZmZlciA9IG5ldyBjaGFyW25ld2NhcGFjaXR5XTsKLSAgICAgICAgbWVtY3B5KG5ld2J1ZmZlciwgbUN1dEJ1ZmZlciwgbUNhcGFjaXR5KTsKKyAgICAgICAgaWYgKG1Xcml0ZUhlYWQgPCBtUmVhZEhlYWQpIHsKKyAgICAgICAgICAgIC8vIGRhdGEgaXNuJ3QgY29udGludW91cywgbmVlZCB0byBtZW1jcHkgdHdpY2UKKyAgICAgICAgICAgIC8vIHRvIG1vdmUgcHJldmlvdXMgZGF0YSB0byBuZXcgYnVmZmVyLgorICAgICAgICAgICAgc2l6ZV90IGNvcHlMZWZ0ID0gbUNhcGFjaXR5IC0gbVJlYWRIZWFkOworICAgICAgICAgICAgbWVtY3B5KG5ld2J1ZmZlciwgbUN1dEJ1ZmZlciArIG1SZWFkSGVhZCwgY29weUxlZnQpOworICAgICAgICAgICAgbWVtY3B5KG5ld2J1ZmZlciArIGNvcHlMZWZ0LCBtQ3V0QnVmZmVyLCBtV3JpdGVIZWFkKTsKKyAgICAgICAgICAgIG1SZWFkSGVhZCA9IDA7CisgICAgICAgICAgICBtV3JpdGVIZWFkICs9IGNvcHlMZWZ0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWVtY3B5KG5ld2J1ZmZlciwgbUN1dEJ1ZmZlciArIG1SZWFkSGVhZCwgbVdyaXRlSGVhZCAtIG1SZWFkSGVhZCk7CisgICAgICAgICAgICBtV3JpdGVIZWFkIC09IG1SZWFkSGVhZDsKKyAgICAgICAgICAgIG1SZWFkSGVhZCA9IDA7CisgICAgICAgIH0KICAgICAgICAgZGVsZXRlIFtdIG1DdXRCdWZmZXI7CiAgICAgICAgIG1DYXBhY2l0eSA9IG5ld2NhcGFjaXR5OwogICAgICAgICBtQ3V0QnVmZmVyID0gbmV3YnVmZmVyOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvQW5kcm9pZC5icCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL0FuZHJvaWQuYnAKaW5kZXggMGIwYWNiZi4uN2FjZjczNSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvQW5kcm9pZC5icAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9BbmRyb2lkLmJwCkBAIC0yOSw3ICsyOSw2IEBACiAgICAgXSwKIAogICAgIGluY2x1ZGVfZGlyczogWwotICAgICAgICAiZnJhbWV3b3Jrcy9hdi9tZWRpYS9saWJzdGFnZWZyaWdodCIsCiAgICAgICAgICJmcmFtZXdvcmtzL25hdGl2ZS9pbmNsdWRlL21lZGlhL29wZW5tYXgiLAogICAgIF0sCiAKQEAgLTY1LDYgKzY0LDggQEAKIAogICAgIGhlYWRlcl9saWJzOiBbCiAgICAgICAgICJsaWJiYXNlX2hlYWRlcnMiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfaGVhZGVycyIsCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9odHRwbGl2ZV9oZWFkZXJzIiwKICAgICBdLAogCiAgICAgc3RhdGljX2xpYnM6IFsKQEAgLTc0LDMgKzc1LDggQEAKICAgICBdLAogCiB9CisKK2NjX2xpYnJhcnlfaGVhZGVycyB7CisgICAgbmFtZTogImxpYnN0YWdlZnJpZ2h0X2h0dHBsaXZlX2hlYWRlcnMiLAorICAgIGV4cG9ydF9pbmNsdWRlX2RpcnM6IFsiLiJdLAorfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvTGl2ZVNlc3Npb24uY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvTGl2ZVNlc3Npb24uY3BwCmluZGV4IDNiYWQwMTUuLjBkN2NhZGQgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL0xpdmVTZXNzaW9uLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9MaXZlU2Vzc2lvbi5jcHAKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJNM1VQYXJzZXIuaCIKICNpbmNsdWRlICJQbGF5bGlzdEZldGNoZXIuaCIKIAotI2luY2x1ZGUgIm1wZWcydHMvQW5vdGhlclBhY2tldFNvdXJjZS5oIgorI2luY2x1ZGUgPEFub3RoZXJQYWNrZXRTb3VyY2UuaD4KIAogI2luY2x1ZGUgPGN1dGlscy9wcm9wZXJ0aWVzLmg+CiAjaW5jbHVkZSA8bWVkaWEvTWVkaWFIVFRQU2VydmljZS5oPgpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvTGl2ZVNlc3Npb24uaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL0xpdmVTZXNzaW9uLmgKaW5kZXggN2E2ZDQ4Ny4uY2VlYTQxZCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvTGl2ZVNlc3Npb24uaAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9MaXZlU2Vzc2lvbi5oCkBAIC0yNCw3ICsyNCw3IEBACiAKICNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+CiAKLSNpbmNsdWRlICJtcGVnMnRzL0FUU1BhcnNlci5oIgorI2luY2x1ZGUgPEFUU1BhcnNlci5oPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL1BsYXlsaXN0RmV0Y2hlci5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9QbGF5bGlzdEZldGNoZXIuY3BwCmluZGV4IGIyM2FhOGEuLjkwN2IzMjYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL1BsYXlsaXN0RmV0Y2hlci5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvUGxheWxpc3RGZXRjaGVyLmNwcApAQCAtMjQsOSArMjQsOSBAQAogI2luY2x1ZGUgIkhUVFBEb3dubG9hZGVyLmgiCiAjaW5jbHVkZSAiTGl2ZVNlc3Npb24uaCIKICNpbmNsdWRlICJNM1VQYXJzZXIuaCIKLSNpbmNsdWRlICJpbmNsdWRlL0lEMy5oIgotI2luY2x1ZGUgIm1wZWcydHMvQW5vdGhlclBhY2tldFNvdXJjZS5oIgotI2luY2x1ZGUgIm1wZWcydHMvSGxzU2FtcGxlRGVjcnlwdG9yLmgiCisjaW5jbHVkZSA8SUQzLmg+CisjaW5jbHVkZSA8QW5vdGhlclBhY2tldFNvdXJjZS5oPgorI2luY2x1ZGUgPEhsc1NhbXBsZURlY3J5cHRvci5oPgogCiAjaW5jbHVkZSA8ZGF0YXNvdXJjZS9EYXRhVVJJU291cmNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BQml0UmVhZGVyLmg+CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9QbGF5bGlzdEZldGNoZXIuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL1BsYXlsaXN0RmV0Y2hlci5oCmluZGV4IDVkM2Y5YzEuLjJlMjgxNjQgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL1BsYXlsaXN0RmV0Y2hlci5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL1BsYXlsaXN0RmV0Y2hlci5oCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BSGFuZGxlci5oPgogI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CiAKLSNpbmNsdWRlICJtcGVnMnRzL0FUU1BhcnNlci5oIgorI2luY2x1ZGUgPEFUU1BhcnNlci5oPgogI2luY2x1ZGUgIkxpdmVTZXNzaW9uLmgiCiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL2Z1enplci9BbmRyb2lkLmJwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvZnV6emVyL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQwOTdiMAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL2Z1enplci9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgeworICAgIC8vIFNlZTogaHR0cDovL2dvL2FuZHJvaWQtbGljZW5zZS1mYXEKKyAgICAvLyBBIGxhcmdlLXNjYWxlLWNoYW5nZSBhZGRlZCAnZGVmYXVsdF9hcHBsaWNhYmxlX2xpY2Vuc2VzJyB0byBpbXBvcnQKKyAgICAvLyBhbGwgb2YgdGhlICdsaWNlbnNlX2tpbmRzJyBmcm9tICJmcmFtZXdvcmtzX2F2X21lZGlhX2xpYnN0YWdlZnJpZ2h0X2h0dHBsaXZlX2xpY2Vuc2UiCisgICAgLy8gdG8gZ2V0IHRoZSBiZWxvdyBsaWNlbnNlIGtpbmRzOgorICAgIC8vICAgU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAorICAgIGRlZmF1bHRfYXBwbGljYWJsZV9saWNlbnNlczogWworICAgICAgICAiZnJhbWV3b3Jrc19hdl9tZWRpYV9saWJzdGFnZWZyaWdodF9odHRwbGl2ZV9saWNlbnNlIiwKKyAgICBdLAorfQorCitjY19mdXp6IHsKKyAgICBuYW1lOiAiaHR0cGxpdmVfZnV6emVyIiwKKyAgICBzcmNzOiBbCisgICAgICAgICJodHRwbGl2ZV9mdXp6ZXIuY3BwIiwKKyAgICBdLAorICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9odHRwbGl2ZSIsCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9pZDMiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfbWV0YWRhdGF1dGlscyIsCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9tcGVnMnN1cHBvcnQiLAorICAgICAgICAibGlibG9nIiwKKyAgICAgICAgImxpYmN1dGlscyIsCisgICAgICAgICJsaWJkYXRhc291cmNlIiwKKyAgICAgICAgImxpYm1lZGlhIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0IiwKKyAgICAgICAgImxpYnV0aWxzIiwKKyAgICBdLAorICAgIGhlYWRlcl9saWJzOiBbCisgICAgICAgICJsaWJiYXNlX2hlYWRlcnMiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbl9oZWFkZXJzIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2hlYWRlcnMiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfaHR0cGxpdmVfaGVhZGVycyIsCisgICAgXSwKKyAgICBzaGFyZWRfbGliczogWworICAgICAgICAibGliY3J5cHRvIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24iLAorICAgICAgICAibGliaGlkbGJhc2UiLAorICAgICAgICAibGliaGlkbG1lbW9yeSIsCisgICAgICAgICJhbmRyb2lkLmhpZGwuYWxsb2NhdG9yQDEuMCIsCisgICAgXSwKKyAgICBjb3JwdXM6IFsiY29ycHVzLyoiXSwKKyAgICBkaWN0aW9uYXJ5OiAiaHR0cGxpdmVfZnV6emVyLmRpY3QiLAorICAgIGZ1enpfY29uZmlnOiB7CisgICAgICAgIGNjOiBbCisgICAgICAgICAgICAiYW5kcm9pZC1tZWRpYS1mdXp6aW5nLXJlcG9ydHNAZ29vZ2xlLmNvbSIsCisgICAgICAgIF0sCisgICAgICAgIGNvbXBvbmVudGlkOiAxNTUyNzYsCisgICAgfSwKK30KZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL2Z1enplci9SRUFETUUubWQgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9mdXp6ZXIvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNjRlYTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9mdXp6ZXIvUkVBRE1FLm1kCkBAIC0wLDAgKzEsNTYgQEAKKyMgRnV6emVyIGZvciBsaWJzdGFnZWZyaWdodF9odHRwbGl2ZQorCisjIyBQbHVnaW4gRGVzaWduIENvbnNpZGVyYXRpb25zCitUaGUgZnV6emVyIHBsdWdpbiBmb3IgbGlic3RhZ2VmcmlnaHRfaHR0cGxpdmUgaXMgZGVzaWduZWQgYmFzZWQgb24gdGhlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxpYnJhcnkgYW5kIHRyaWVzIHRvIGFjaGlldmUgdGhlIGZvbGxvd2luZzoKKworIyMjIyMgTWF4aW1pemUgY29kZSBjb3ZlcmFnZQorVGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcmUgbm90IGhhcmRjb2RlZCwgYnV0IGluc3RlYWQgc2VsZWN0ZWQgYmFzZWQgb24KK2luY29taW5nIGRhdGEuQWxzbywgc2V2ZXJhbCAubTN1OCBmaWxlcyBhcmUgaGFuZC1jcmFmdGVkIGFuZCBhZGRlZCB0byB0aGUgY29ycHVzIGRpcmVjdG9yeSB0byBpbmNyZWFzZSB0aGUgY29kZSBjb3ZlcmFnZS4gVGhpcyBlbnN1cmVzIG1vcmUgY29kZSBwYXRocyBhcmUgcmVhY2hlZCBieSB0aGUgZnV6emVyLgorCitsaWJzdGFnZWZyaWdodF9odHRwbGl2ZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisxLiBGaW5hbCBSZXN1bHQgKHBhcmFtZXRlciBuYW1lOiBgZmluYWxSZXN1bHRgKQorMi4gRmxhZ3MgKHBhcmFtZXRlciBuYW1lOiBgZmxhZ3NgKQorMy4gVGltZSBVcyAocGFyYW1ldGVyIG5hbWU6IGB0aW1lVXNgKQorNC4gVHJhY2sgSW5kZXggKHBhcmFtZXRlciBuYW1lOiBgdHJhY2tJbmRleGApCis1LiBJbmRleCAocGFyYW1ldGVyIG5hbWU6IGBpbmRleGApCis2LiBTZWxlY3QgKHBhcmFtZXRlciBuYW1lOiBgc2VsZWN0YCkKKworfCBQYXJhbWV0ZXJ8IFZhbGlkIFZhbHVlc3wgQ29uZmlndXJlZCBWYWx1ZXwKK3wtLS0tLS0tLS0tLS0tIHwtLS0tLS0tLS0tLS0tfCAtLS0tLSB8Cit8IGBmaW5hbFJlc3VsdGAgfCBgLTM0YCB0byBgLTFgIHwgVmFsdWUgb2J0YWluZWQgZnJvbSBGdXp6ZWREYXRhUHJvdmlkZXJ8Cit8IGBmbGFnc2AgfCBgMGAgdG8gYDFgIHwgVmFsdWUgb2J0YWluZWQgZnJvbSBGdXp6ZWREYXRhUHJvdmlkZXJ8Cit8IGB0aW1lVXNgIHwgYDBgIHRvIGAxMDAwMDAwMGAgfCBWYWx1ZSBvYnRhaW5lZCBmcm9tIEZ1enplZERhdGFQcm92aWRlcnwKK3wgYHRyYWNrSW5kZXhgIHwgYFVJTlQzMl9NSU5gIHRvIGBVSU5UMzJfTUFYYCB8IFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorfCBgaW5kZXhgIHwgYFVJTlQzMl9NSU5gIHRvIGBVSU5UMzJfTUFYYCB8IFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorfCBgc2VsZWN0YCB8IGBUcnVlYCB0byBgRmFsc2VgIHwgVmFsdWUgb2J0YWluZWQgZnJvbSBGdXp6ZWREYXRhUHJvdmlkZXJ8CisKK1RoaXMgYWxzbyBlbnN1cmVzIHRoYXQgdGhlIHBsdWdpbiBpcyBhbHdheXMgZGV0ZXJtaW5pc3RpYyBmb3IgYW55IGdpdmVuIGlucHV0LgorCisjIyMjIyBNYXhpbWl6ZSB1dGlsaXphdGlvbiBvZiBpbnB1dCBkYXRhCitUaGUgcGx1Z2luIGZlZWRzIHRoZSBlbnRpcmUgaW5wdXQgZGF0YSB0byB0aGUgaHR0cGxpdmUgbW9kdWxlLgorVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHBsdWdpbiB0b2xlcmF0ZXMgYW55IGtpbmQgb2YgaW5wdXQgKGVtcHR5LCBodWdlLAorbWFsZm9ybWVkLCBldGMpIGFuZCBkb2VzbnQgYGV4aXQoKWAgb24gYW55IGlucHV0IGFuZCB0aGVyZWJ5IGluY3JlYXNpbmcgdGhlCitjaGFuY2Ugb2YgaWRlbnRpZnlpbmcgdnVsbmVyYWJpbGl0aWVzLgorCisjIyBCdWlsZAorCitUaGlzIGRlc2NyaWJlcyBzdGVwcyB0byBidWlsZCBodHRwbGl2ZV9mdXp6ZXIgYmluYXJ5LgorCisjIyMgQW5kcm9pZAorCisjIyMjIFN0ZXBzIHRvIGJ1aWxkCitCdWlsZCB0aGUgZnV6emVyCitgYGAKKyAgJCBtbSAtaiQobnByb2MpIGh0dHBsaXZlX2Z1enplcgorYGBgCisjIyMjIFN0ZXBzIHRvIHJ1bgorVG8gcnVuIG9uIGRldmljZQorYGBgCisgICQgYWRiIHB1c2ggJEFORFJPSURfUFJPRFVDVF9PVVQvZGF0YS9mdXp6LyQoVEFSR0VUX0FSQ0gpL2xpYiAvZGF0YS9mdXp6LyQoVEFSR0VUX0FSQ0gpL2xpYgorICAkIGFkYiBwdXNoICRBTkRST0lEX1BST0RVQ1RfT1VUL2RhdGEvZnV6ei8kKFRBUkdFVF9BUkNIKS9odHRwbGl2ZV9mdXp6ZXIgL2RhdGEvZnV6ei8kKFRBUkdFVF9BUkNIKS9odHRwbGl2ZV9mdXp6ZXIKKyAgJCBhZGIgc2hlbGwgL2RhdGEvZnV6ei8ke1RBUkdFVF9BUkNIfS9odHRwbGl2ZV9mdXp6ZXIvaHR0cGxpdmVfZnV6emVyIC9kYXRhL2Z1enovJHtUQVJHRVRfQVJDSH0vaHR0cGxpdmVfZnV6emVyL2NvcnB1cworYGBgCisKKyMjIFJlZmVyZW5jZXM6CisgKiBodHRwOi8vbGx2bS5vcmcvZG9jcy9MaWJGdXp6ZXIuaHRtbAorICogaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9vc3MtZnV6egpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvZnV6emVyL2NvcnB1cy9jcnlwdC5rZXkgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9mdXp6ZXIvY29ycHVzL2NyeXB0LmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWQ1ZDdmCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvZnV6emVyL2NvcnB1cy9jcnlwdC5rZXkKQEAgLTAsMCArMSwyIEBACivbCiuBz4z80DXQiV9470jOMwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvZnV6emVyL2NvcnB1cy9lbmNyeXB0ZWQubTN1OCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL2Z1enplci9jb3JwdXMvZW5jcnlwdGVkLm0zdTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJiMGVhYwotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL2Z1enplci9jb3JwdXMvZW5jcnlwdGVkLm0zdTgKQEAgLTAsMCArMSwxMiBAQAorI0VYVE0zVQorI0VYVC1YLVRBUkdFVERVUkFUSU9OOjEwCisjRVhULVgtQUxMT1ctQ0FDSEU6WUVTCisjRVhULVgtUExBWUxJU1QtVFlQRTpWT0QKKyNFWFQtWC1WRVJTSU9OOjMKKyNFWFQtWC1NRURJQS1TRVFVRU5DRToxCisjRVhULVgtS0VZOk1FVEhPRD1BRVMtMTI4LFVSST0iLi4vLi4vZnV6ei9hcm02NC9odHRwbGl2ZV9mdXp6ZXIvY29ycHVzL2NyeXB0LmtleSIKKyNFWFRJTkY6MTAuMDAwLAoraHR0cHM6Ly9ub24uZXhpc3RlbnRzaXRlLmNvbS90ZXN0LWRvZXNudC1kZXJlZmVyZW5jZS10aGVzZS1wYXRocy9maWxlU2VxdWVuY2UxLnRzCisjRVhUSU5GOjUuMDkyLAoraHR0cHM6Ly9ub24uZXhpc3RlbnRzaXRlLmNvbS90ZXN0LWRvZXNudC1kZXJlZmVyZW5jZS10aGVzZS1wYXRocy9maWxlU2VxdWVuY2UxLnRzCisjRVhULVgtRU5ETElTVApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvZnV6emVyL2NvcnB1cy9obHMubTN1OCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL2Z1enplci9jb3JwdXMvaGxzLm0zdTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMzOGUwNAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL2Z1enplci9jb3JwdXMvaGxzLm0zdTgKQEAgLTAsMCArMSw4IEBACisjRVhUTTNVCisjRVhULVgtVEFSR0VURFVSQVRJT046MTAKKyNFWFQtWC1NRURJQS1TRVFVRU5DRTowCisjRVhUSU5GOjEwLCBubyBkZXNjCitodHRwczovL25vbi5leGlzdGVudHNpdGUuY29tL3Rlc3QtZG9lc250LWRlcmVmZXJlbmNlLXRoZXNlLXBhdGhzL2ZpbGVTZXF1ZW5jZTEudHMKKyNFWFRJTkY6MTAsIG5vIGRlc2MKK2h0dHBzOi8vbm9uLmV4aXN0ZW50c2l0ZS5jb20vdGVzdC1kb2VzbnQtZGVyZWZlcmVuY2UtdGhlc2UtcGF0aHMvZmlsZVNlcXVlbmNlMi50cworI0VYVC1YLUVORExJU1QKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL2Z1enplci9jb3JwdXMvaW5kZXgxLm0zdTggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9mdXp6ZXIvY29ycHVzL2luZGV4MS5tM3U4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZWZmNTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9mdXp6ZXIvY29ycHVzL2luZGV4MS5tM3U4CkBAIC0wLDAgKzEsMTQgQEAKKyNFWFRNM1UKKyNFWFQtWC1WRVJTSU9OOjQKKyNFWFQtWC1UQVJHRVREVVJBVElPTjo1CisjRVhULVgtS0VZOk1FVEhPRD1OT05FCisjRVhULVgtRElTQ09OVElOVUlUWS1TRVFVRU5DRTowCisjRVhULVgtUExBWUxJU1QtVFlQRTpWT0QKKyNFWFRJTkY6NSwKK2h0dHBzOi8vbm9uLmV4aXN0ZW50c2l0ZS5jb20vdGVzdC1kb2VzbnQtZGVyZWZlcmVuY2UtdGhlc2UtcGF0aHMvZmlsZVNlcXVlbmNlMC50cworI0VYVC1YLURJU0NPTlRJTlVJVFkKKyNFWFRJTkY6NSwKK2h0dHBzOi8vbm9uLmV4aXN0ZW50c2l0ZS5jb20vdGVzdC1kb2VzbnQtZGVyZWZlcmVuY2UtdGhlc2UtcGF0aHMvZmlsZVNlcXVlbmNlMS50cworI0VYVElORjo1LAoraHR0cHM6Ly9ub24uZXhpc3RlbnRzaXRlLmNvbS90ZXN0LWRvZXNudC1kZXJlZmVyZW5jZS10aGVzZS1wYXRocy9maWxlU2VxdWVuY2UyLnRzCisjRVhULVgtRU5ETElTVApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvZnV6emVyL2NvcnB1cy9pbmRleDIubTN1OCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL2Z1enplci9jb3JwdXMvaW5kZXgyLm0zdTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdhMDE4OQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL2Z1enplci9jb3JwdXMvaW5kZXgyLm0zdTgKQEAgLTAsMCArMSw2IEBACisjRVhUTTNVCisjRVhULVgtSU5ERVBFTkRFTlQtU0VHTUVOVFMKKyNFWFQtWC1TVFJFQU0tSU5GOkNMT1NFRC1DQVBUSU9OUz1OT05FLEJBTkRXSURUSD0xNjUzNDAsUkVTT0xVVElPTj0yNTZ4MTQ0LENPREVDUz0ibXA0YS40MC41LGF2YzEuNDJjMDBiIgoraHR0cHM6Ly9ub24uZXhpc3RlbnRzaXRlLmNvbS90ZXN0LWRvZXNudC1kZXJlZmVyZW5jZS10aGVzZS1wYXRocy9wcm9nX2luZGV4Lm0zdTgKKyNFWFQtWC1TVFJFQU0tSU5GOkNMT1NFRC1DQVBUSU9OUz1OT05FLEJBTkRXSURUSD0zNDQzODgsUkVTT0xVVElPTj00MjZ4MjQwLENPREVDUz0ibXA0YS40MC41LGF2YzEuNGQ0MDE1IgoraHR0cHM6Ly9ub24uZXhpc3RlbnRzaXRlLmNvbS90ZXN0LWRvZXNudC1kZXJlZmVyZW5jZS10aGVzZS1wYXRocy9wcm9nX2luZGV4MS5tM3U4CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9mdXp6ZXIvY29ycHVzL2luZGV4My5tM3U4IGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvZnV6emVyL2NvcnB1cy9pbmRleDMubTN1OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjdmNDg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvZnV6emVyL2NvcnB1cy9pbmRleDMubTN1OApAQCAtMCwwICsxLDEzIEBACisjRVhUTTNVCisjRVhULVgtVkVSU0lPTjo0CisjRVhULVgtVEFSR0VURFVSQVRJT046NQorI0VYVC1YLUtFWTpNRVRIT0Q9QUVTLTEyOCxVUkk9Imh0dHBzOi8vZGVtby51bmlmaWVkLXN0cmVhbWluZy5jb20vdmlkZW8vdGVhcnMtb2Ytc3RlZWwvYWVzLmtleSIsSVY9MFg5OWI3NDAwN2I2MjU0ZTRiZDFjNmUwMzYzMWNhZDE1YgorI0VYVC1YLVBMQVlMSVNULVRZUEU6Vk9ECisjRVhUSU5GOjUsCitodHRwczovL25vbi5leGlzdGVudHNpdGUuY29tL3Rlc3QtZG9lc250LWRlcmVmZXJlbmNlLXRoZXNlLXBhdGhzL2ZpbGVTZXF1ZW5jZTEudHMKKyNFWFQtWC1ESVNDT05USU5VSVRZCisjRVhUSU5GOjUsCitodHRwczovL25vbi5leGlzdGVudHNpdGUuY29tL3Rlc3QtZG9lc250LWRlcmVmZXJlbmNlLXRoZXNlLXBhdGhzL2ZpbGVTZXF1ZW5jZTIudHMKKyNFWFRJTkY6NSwKK2h0dHBzOi8vbm9uLmV4aXN0ZW50c2l0ZS5jb20vdGVzdC1kb2VzbnQtZGVyZWZlcmVuY2UtdGhlc2UtcGF0aHMvZmlsZVNlcXVlbmNlMy50cworI0VYVC1YLUVORExJU1QKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL2Z1enplci9jb3JwdXMvaW5kZXg0Lm0zdTggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9mdXp6ZXIvY29ycHVzL2luZGV4NC5tM3U4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YmEzN2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9mdXp6ZXIvY29ycHVzL2luZGV4NC5tM3U4CkBAIC0wLDAgKzEsMTUgQEAKKyNFWFRNM1UKKyNFWFQtWC1WRVJTSU9OOjQKKyNFWFQtWC1UQVJHRVREVVJBVElPTjo1CisjRVhULVgtS0VZOk1FVEhPRD1TQU1QTEUtQUVTLFVSST0iZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsYTRjZDk5OTVhMWFhOTFlMSIsSVY9MFg5OWI3NDAwN2I2MjU0ZTRiZDFjNmUwMzYzMWNhZDE1YgorI0VYVC1YLURJU0NPTlRJTlVJVFktU0VRVUVOQ0U6MAorI0VYVC1YLVBMQVlMSVNULVRZUEU6Vk9ECisjRVhULVgtRElTQ09OVElOVUlUWQorI0VYVElORjo1LAoraHR0cHM6Ly9ub24uZXhpc3RlbnRzaXRlLmNvbS90ZXN0LWRvZXNudC1kZXJlZmVyZW5jZS10aGVzZS1wYXRocy9maWxlU2VxdWVuY2UwLnRzCisjRVhUSU5GOjUsCitodHRwczovL25vbi5leGlzdGVudHNpdGUuY29tL3Rlc3QtZG9lc250LWRlcmVmZXJlbmNlLXRoZXNlLXBhdGhzL2ZpbGVTZXF1ZW5jZTEudHMKKyNFWFQtWC1ESVNDT05USU5VSVRZCisjRVhUSU5GOjUsCitodHRwczovL25vbi5leGlzdGVudHNpdGUuY29tL3Rlc3QtZG9lc250LWRlcmVmZXJlbmNlLXRoZXNlLXBhdGhzL2ZpbGVTZXF1ZW5jZTIudHMKKyNFWFQtWC1FTkRMSVNUCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9mdXp6ZXIvY29ycHVzL2luZGV4NS5tM3U4IGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvZnV6emVyL2NvcnB1cy9pbmRleDUubTN1OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTIwZGU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvZnV6emVyL2NvcnB1cy9pbmRleDUubTN1OApAQCAtMCwwICsxLDE0IEBACisjRVhUTTNVCisjRVhULVgtVEFSR0VURFVSQVRJT046MTEKKyNFWFQtWC1LRVk6TUVUSE9EPU5PTkUKKyNFWFQtWC1NRURJQS1TRVFVRU5DRTowCisjRVhULVgtVkVSU0lPTjo0CisjRVhUSU5GOjEwLjAsCisjRVhULVgtQllURVJBTkdFOjEwQDAKK2h0dHBzOi8vbm9uLmV4aXN0ZW50c2l0ZS5jb20vdGVzdC1kb2VzbnQtZGVyZWZlcmVuY2UtdGhlc2UtcGF0aHMvZmlsZVNlcXVlbmNlMS50cworI0VYVElORjoxMC4wLAorI0VYVC1YLUJZVEVSQU5HRToyMEAxMAoraHR0cHM6Ly9ub24uZXhpc3RlbnRzaXRlLmNvbS90ZXN0LWRvZXNudC1kZXJlZmVyZW5jZS10aGVzZS1wYXRocy9maWxlU2VxdWVuY2UxLnRzCisjRVhUSU5GOjEwLjAsCisjRVhULVgtQllURVJBTkdFOjgwCitodHRwczovL25vbi5leGlzdGVudHNpdGUuY29tL3Rlc3QtZG9lc250LWRlcmVmZXJlbmNlLXRoZXNlLXBhdGhzL2ZpbGVTZXF1ZW5jZTEudHMKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL2Z1enplci9jb3JwdXMvaW5kZXg2Lm0zdTggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9mdXp6ZXIvY29ycHVzL2luZGV4Ni5tM3U4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ODM2OGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9mdXp6ZXIvY29ycHVzL2luZGV4Ni5tM3U4CkBAIC0wLDAgKzEsMTIgQEAKKyNFWFRNM1UKKyNFWFQtWC1WRVJTSU9OOjQKKyNFWFQtWC1UQVJHRVREVVJBVElPTjo1CisjRVhULVgtS0VZOk1FVEhPRD1BRVMtMTI4LFVSST0iZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsYTRjZDk5OTVhMWFhOTFlMSIsSVY9MHgzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMAorI0VYVC1YLVBMQVlMSVNULVRZUEU6Vk9ECisjRVhUSU5GOjUsCitodHRwczovL25vbi5leGlzdGVudHNpdGUuY29tL3Rlc3QtZG9lc250LWRlcmVmZXJlbmNlLXRoZXNlLXBhdGhzL2ZpbGVTZXF1ZW5jZTEudHMKKyNFWFRJTkY6NSwKK2h0dHBzOi8vbm9uLmV4aXN0ZW50c2l0ZS5jb20vdGVzdC1kb2VzbnQtZGVyZWZlcmVuY2UtdGhlc2UtcGF0aHMvZmlsZVNlcXVlbmNlMi50cworI0VYVElORjo1LAoraHR0cHM6Ly9ub24uZXhpc3RlbnRzaXRlLmNvbS90ZXN0LWRvZXNudC1kZXJlZmVyZW5jZS10aGVzZS1wYXRocy9maWxlU2VxdWVuY2UzLnRzCisjRVhULVgtRU5ETElTVApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvZnV6emVyL2NvcnB1cy9pbmRleDcubTN1OCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL2Z1enplci9jb3JwdXMvaW5kZXg3Lm0zdTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA5OTQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL2Z1enplci9jb3JwdXMvaW5kZXg3Lm0zdTgKQEAgLTAsMCArMSw0NiBAQAorI0VYVE0zVQorI0VYVC1YLVZFUlNJT046NAorIyMgQ3JlYXRlZCB3aXRoIFVuaWZpZWQgU3RyZWFtaW5nIFBsYXRmb3JtICAodmVyc2lvbj0xLjExLjMtMjQ0MzgpCisjRVhULVgtU0VTU0lPTi1LRVk6TUVUSE9EPUFFUy0xMjgsVVJJPSJodHRwczovL2RlbW8udW5pZmllZC1zdHJlYW1pbmcuY29tL3ZpZGVvL3RlYXJzLW9mLXN0ZWVsL2Flcy5rZXkiCisKKyMgQVVESU8gZ3JvdXBzCisjRVhULVgtTUVESUE6VFlQRT1BVURJTyxHUk9VUC1JRD0iYXVkaW8tYWFjbC02NCIsTEFOR1VBR0U9ImVuIixOQU1FPSJFbmdsaXNoIixERUZBVUxUPVlFUyxBVVRPU0VMRUNUPVlFUyxDSEFOTkVMUz0iMiIKKyNFWFQtWC1NRURJQTpUWVBFPUFVRElPLEdST1VQLUlEPSJhdWRpby1hYWNsLTEyOCIsTEFOR1VBR0U9ImVuIixOQU1FPSJFbmdsaXNoIixERUZBVUxUPVlFUyxBVVRPU0VMRUNUPVlFUyxDSEFOTkVMUz0iMiIKKworIyBTVUJUSVRMRVMgZ3JvdXBzCisjRVhULVgtTUVESUE6VFlQRT1TVUJUSVRMRVMsR1JPVVAtSUQ9InRleHRzdHJlYW0iLExBTkdVQUdFPSJlbiIsTkFNRT0iRW5nbGlzaCIsREVGQVVMVD1ZRVMsQVVUT1NFTEVDVD1ZRVMsVVJJPSJ0ZWFycy1vZi1zdGVlbC1hZXMtdGV4dHN0cmVhbV9lbmc9MTAwMC5tM3U4IgorI0VYVC1YLU1FRElBOlRZUEU9U1VCVElUTEVTLEdST1VQLUlEPSJ0ZXh0c3RyZWFtIixMQU5HVUFHRT0icnUiLE5BTUU9IlJ1c3NpYW4iLEFVVE9TRUxFQ1Q9WUVTLFVSST0idGVhcnMtb2Ytc3RlZWwtYWVzLXRleHRzdHJlYW1fcnVzPTEwMDAubTN1OCIKKworIyB2YXJpYW50cworI0VYVC1YLVNUUkVBTS1JTkY6QkFORFdJRFRIPTQ5NDAwMCxDT0RFQ1M9Im1wNGEuNDAuMixhdmMxLjQyQzAwRCIsUkVTT0xVVElPTj0yMjR4MTAwLEZSQU1FLVJBVEU9MjQsQVVESU89ImF1ZGlvLWFhY2wtNjQiLFNVQlRJVExFUz0idGV4dHN0cmVhbSIsQ0xPU0VELUNBUFRJT05TPU5PTkUKK3RlYXJzLW9mLXN0ZWVsLWFlcy1hdWRpb19lbmc9NjQwMDgtdmlkZW9fZW5nPTQwMTAwMC5tM3U4CisjRVhULVgtU1RSRUFNLUlORjpCQU5EV0lEVEg9OTMzMDAwLENPREVDUz0ibXA0YS40MC4yLGF2YzEuNDJDMDE2IixSRVNPTFVUSU9OPTQ0OHgyMDAsRlJBTUUtUkFURT0yNCxBVURJTz0iYXVkaW8tYWFjbC0xMjgiLFNVQlRJVExFUz0idGV4dHN0cmVhbSIsQ0xPU0VELUNBUFRJT05TPU5PTkUKK3RlYXJzLW9mLXN0ZWVsLWFlcy1hdWRpb19lbmc9MTI4MDAyLXZpZGVvX2VuZz03NTEwMDAubTN1OAorI0VYVC1YLVNUUkVBTS1JTkY6QkFORFdJRFRIPTExOTgwMDAsQ09ERUNTPSJtcDRhLjQwLjIsYXZjMS40RDQwMUYiLFJFU09MVVRJT049Nzg0eDM1MCxGUkFNRS1SQVRFPTI0LEFVRElPPSJhdWRpby1hYWNsLTEyOCIsU1VCVElUTEVTPSJ0ZXh0c3RyZWFtIixDTE9TRUQtQ0FQVElPTlM9Tk9ORQordGVhcnMtb2Ytc3RlZWwtYWVzLWF1ZGlvX2VuZz0xMjgwMDItdmlkZW9fZW5nPTEwMDEwMDAubTN1OAorI0VYVC1YLVNUUkVBTS1JTkY6QkFORFdJRFRIPTE3MjgwMDAsQ09ERUNTPSJtcDRhLjQwLjIsYXZjMS42NDAwMjgiLFJFU09MVVRJT049MTY4MHg3NTAsRlJBTUUtUkFURT0yNCxWSURFTy1SQU5HRT1TRFIsQVVESU89ImF1ZGlvLWFhY2wtMTI4IixTVUJUSVRMRVM9InRleHRzdHJlYW0iLENMT1NFRC1DQVBUSU9OUz1OT05FCit0ZWFycy1vZi1zdGVlbC1hZXMtYXVkaW9fZW5nPTEyODAwMi12aWRlb19lbmc9MTUwMTAwMC5tM3U4CisjRVhULVgtU1RSRUFNLUlORjpCQU5EV0lEVEg9MjQ2OTAwMCxDT0RFQ1M9Im1wNGEuNDAuMixhdmMxLjY0MDAyOCIsUkVTT0xVVElPTj0xNjgweDc1MCxGUkFNRS1SQVRFPTI0LFZJREVPLVJBTkdFPVNEUixBVURJTz0iYXVkaW8tYWFjbC0xMjgiLFNVQlRJVExFUz0idGV4dHN0cmVhbSIsQ0xPU0VELUNBUFRJT05TPU5PTkUKK3RlYXJzLW9mLXN0ZWVsLWFlcy1hdWRpb19lbmc9MTI4MDAyLXZpZGVvX2VuZz0yMjAwMDAwLm0zdTgKKworIyB2YXJpYW50cworI0VYVC1YLVNUUkVBTS1JTkY6QkFORFdJRFRIPTEwMjUwMDAsQ09ERUNTPSJtcDRhLjQwLjIsaHZjMS4xLjYuTDE1MC45MCIsUkVTT0xVVElPTj0xNjgweDc1MCxGUkFNRS1SQVRFPTI0LFZJREVPLVJBTkdFPVNEUixBVURJTz0iYXVkaW8tYWFjbC02NCIsU1VCVElUTEVTPSJ0ZXh0c3RyZWFtIixDTE9TRUQtQ0FQVElPTlM9Tk9ORQordGVhcnMtb2Ytc3RlZWwtYWVzLWF1ZGlvX2VuZz02NDAwOC12aWRlb19lbmdfMT05MDIwMDAubTN1OAorI0VYVC1YLVNUUkVBTS1JTkY6QkFORFdJRFRIPTEzNjgwMDAsQ09ERUNTPSJtcDRhLjQwLjIsaHZjMS4xLjYuTDE1MC45MCIsUkVTT0xVVElPTj0yNTc2eDExNTAsRlJBTUUtUkFURT0yNCxWSURFTy1SQU5HRT1TRFIsQVVESU89ImF1ZGlvLWFhY2wtMTI4IixTVUJUSVRMRVM9InRleHRzdHJlYW0iLENMT1NFRC1DQVBUSU9OUz1OT05FCit0ZWFycy1vZi1zdGVlbC1hZXMtYXVkaW9fZW5nPTEyODAwMi12aWRlb19lbmdfMT0xMTYxMDAwLm0zdTgKKyNFWFQtWC1TVFJFQU0tSU5GOkJBTkRXSURUSD0xODE1MDAwLENPREVDUz0ibXA0YS40MC4yLGh2YzEuMS42LkwxNTAuOTAiLFJFU09MVVRJT049MzM2MHgxNTAwLEZSQU1FLVJBVEU9MjQsVklERU8tUkFOR0U9U0RSLEFVRElPPSJhdWRpby1hYWNsLTEyOCIsU1VCVElUTEVTPSJ0ZXh0c3RyZWFtIixDTE9TRUQtQ0FQVElPTlM9Tk9ORQordGVhcnMtb2Ytc3RlZWwtYWVzLWF1ZGlvX2VuZz0xMjgwMDItdmlkZW9fZW5nXzE9MTU4MzAwMC5tM3U4CisKKyMgdmFyaWFudHMKKyNFWFQtWC1TVFJFQU0tSU5GOkJBTkRXSURUSD02OTAwMCxDT0RFQ1M9Im1wNGEuNDAuMiIsQVVESU89ImF1ZGlvLWFhY2wtNjQiLFNVQlRJVExFUz0idGV4dHN0cmVhbSIKK3RlYXJzLW9mLXN0ZWVsLWFlcy1hdWRpb19lbmc9NjQwMDgubTN1OAorI0VYVC1YLVNUUkVBTS1JTkY6QkFORFdJRFRIPTEzNzAwMCxDT0RFQ1M9Im1wNGEuNDAuMiIsQVVESU89ImF1ZGlvLWFhY2wtMTI4IixTVUJUSVRMRVM9InRleHRzdHJlYW0iCit0ZWFycy1vZi1zdGVlbC1hZXMtYXVkaW9fZW5nPTEyODAwMi5tM3U4CisKKyMga2V5ZnJhbWVzCisjRVhULVgtSS1GUkFNRS1TVFJFQU0tSU5GOkJBTkRXSURUSD01NDAwMCxDT0RFQ1M9ImF2YzEuNDJDMDBEIixSRVNPTFVUSU9OPTIyNHgxMDAsVVJJPSJrZXlmcmFtZXMvdGVhcnMtb2Ytc3RlZWwtYWVzLXZpZGVvX2VuZz00MDEwMDAubTN1OCIKKyNFWFQtWC1JLUZSQU1FLVNUUkVBTS1JTkY6QkFORFdJRFRIPTEwMDAwMCxDT0RFQ1M9ImF2YzEuNDJDMDE2IixSRVNPTFVUSU9OPTQ0OHgyMDAsVVJJPSJrZXlmcmFtZXMvdGVhcnMtb2Ytc3RlZWwtYWVzLXZpZGVvX2VuZz03NTEwMDAubTN1OCIKKyNFWFQtWC1JLUZSQU1FLVNUUkVBTS1JTkY6QkFORFdJRFRIPTEzMzAwMCxDT0RFQ1M9ImF2YzEuNEQ0MDFGIixSRVNPTFVUSU9OPTc4NHgzNTAsVVJJPSJrZXlmcmFtZXMvdGVhcnMtb2Ytc3RlZWwtYWVzLXZpZGVvX2VuZz0xMDAxMDAwLm0zdTgiCisjRVhULVgtSS1GUkFNRS1TVFJFQU0tSU5GOkJBTkRXSURUSD0xMjAwMDAsQ09ERUNTPSJodmMxLjEuNi5MMTUwLjkwIixSRVNPTFVUSU9OPTE2ODB4NzUwLFZJREVPLVJBTkdFPVNEUixVUkk9ImtleWZyYW1lcy90ZWFycy1vZi1zdGVlbC1hZXMtdmlkZW9fZW5nXzE9OTAyMDAwLm0zdTgiCisjRVhULVgtSS1GUkFNRS1TVFJFQU0tSU5GOkJBTkRXSURUSD0xNTQwMDAsQ09ERUNTPSJodmMxLjEuNi5MMTUwLjkwIixSRVNPTFVUSU9OPTI1NzZ4MTE1MCxWSURFTy1SQU5HRT1TRFIsVVJJPSJrZXlmcmFtZXMvdGVhcnMtb2Ytc3RlZWwtYWVzLXZpZGVvX2VuZ18xPTExNjEwMDAubTN1OCIKKyNFWFQtWC1JLUZSQU1FLVNUUkVBTS1JTkY6QkFORFdJRFRIPTIxMDAwMCxDT0RFQ1M9Imh2YzEuMS42LkwxNTAuOTAiLFJFU09MVVRJT049MzM2MHgxNTAwLFZJREVPLVJBTkdFPVNEUixVUkk9ImtleWZyYW1lcy90ZWFycy1vZi1zdGVlbC1hZXMtdmlkZW9fZW5nXzE9MTU4MzAwMC5tM3U4IgpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvZnV6emVyL2NvcnB1cy9pbmRleDgubTN1OCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL2Z1enplci9jb3JwdXMvaW5kZXg4Lm0zdTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUzZDU4OQotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL2Z1enplci9jb3JwdXMvaW5kZXg4Lm0zdTgKQEAgLTAsMCArMSwxMyBAQAorI0VYVE0zVQorI0VYVC1YLVZFUlNJT046NQorCisjRVhULVgtTUVESUE6VFlQRT1BVURJTyxHUk9VUC1JRD0iYXVkaW8iLE5BTUU9IkVuZ2xpc2ggc3RlcmVvIixMQU5HVUFHRT0iZW4iLEFVVE9TRUxFQ1Q9WUVTLFVSST0iLi4vLi4vZnV6ei9hcm02NC9odHRwbGl2ZV9mdXp6ZXIvaW5kZXgxLm0zdTgiCisKKyNFWFQtWC1TVFJFQU0tSU5GOkJBTkRXSURUSD02MjgwMDAsQ09ERUNTPSJhdmMxLjQyYzAwZCxtcDRhLjQwLjIiLFJFU09MVVRJT049MzIweDE4MCxBVURJTz0iYXVkaW8iCisuLi8uLi9mdXp6L2FybTY0L2h0dHBsaXZlX2Z1enplci9pbmRleDEubTN1OAorI0VYVC1YLVNUUkVBTS1JTkY6QkFORFdJRFRIPTkyODAwMCxDT0RFQ1M9ImF2YzEuNDJjMDBkLG1wNGEuNDAuMiIsUkVTT0xVVElPTj00ODB4MjcwLEFVRElPPSJhdWRpbyIKKy4uLy4uL2Z1enovYXJtNjQvaHR0cGxpdmVfZnV6emVyL2luZGV4Mi5tM3U4CisjRVhULVgtU1RSRUFNLUlORjpCQU5EV0lEVEg9MTcyODAwMCxDT0RFQ1M9ImF2YzEuNDJjMDBkLG1wNGEuNDAuMiIsUkVTT0xVVElPTj02NDB4MzYwLEFVRElPPSJhdWRpbyIKKy4uLy4uL2Z1enovYXJtNjQvaHR0cGxpdmVfZnV6emVyL2luZGV4My5tM3U4CisjRVhULVgtU1RSRUFNLUlORjpCQU5EV0lEVEg9MjUyODAwMCxDT0RFQ1M9ImF2YzEuNDJjMDBkLG1wNGEuNDAuMiIsUkVTT0xVVElPTj05NjB4NTQwLEFVRElPPSJhdWRpbyIKKy4uLy4uL2Z1enovYXJtNjQvaHR0cGxpdmVfZnV6emVyL2luZGV4MS5tM3U4CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9mdXp6ZXIvY29ycHVzL3Byb2dfaW5kZXgubTN1OCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL2Z1enplci9jb3JwdXMvcHJvZ19pbmRleC5tM3U4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViODg0MjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9mdXp6ZXIvY29ycHVzL3Byb2dfaW5kZXgubTN1OApAQCAtMCwwICsxLDE3IEBACisjRVhUTTNVCisjRVhULVgtTUVESUE6VFlQRT1BVURJTyxHUk9VUC1JRD0iYXVkaW8iLExBTkdVQUdFPSJlbmciLE5BTUU9IkVuZ2xpc2giLEFVVE9TRUxFQ1Q9WUVTLERFRkFVTFQ9WUVTLFVSST0iY29ycHVzL2luZGV4MS5tM3U4IgorI0VYVC1YLU1FRElBOlRZUEU9QVVESU8sR1JPVVAtSUQ9ImF1ZGlvIixMQU5HVUFHRT0iZnJlIixOQU1FPSJGcmFuw6dhaXMiLEFVVE9TRUxFQ1Q9WUVTLERFRkFVTFQ9Tk8sVVJJPSJjb3JwdXMvaW5kZXgxLm0zdTgiCisjRVhULVgtTUVESUE6VFlQRT1BVURJTyxHUk9VUC1JRD0iYXVkaW8iLExBTkdVQUdFPSJzcCIsTkFNRT0iRXNwYW5vbCIsQVVUT1NFTEVDVD1ZRVMsREVGQVVMVD1OTyxVUkk9ImNvcnB1cy9pbmRleDEubTN1OCIKKyNFWFQtWC1WRVJTSU9OOjQKKyNFWFQtWC1UQVJHRVREVVJBVElPTjo1CisjRVhULVgtS0VZOk1FVEhPRD1OT05FCisjRVhULVgtRElTQ09OVElOVUlUWS1TRVFVRU5DRTowCisjRVhULVgtUExBWUxJU1QtVFlQRTpWT0QKKyNFWFRJTkY6NSwKK2h0dHBzOi8vbm9uLmV4aXN0ZW50c2l0ZS5jb20vdGVzdC1kb2VzbnQtZGVyZWZlcmVuY2UtdGhlc2UtcGF0aHMvZmlsZVNlcXVlbmNlMS50cworI0VYVC1YLURJU0NPTlRJTlVJVFkKKyNFWFRJTkY6NSwKK2h0dHBzOi8vbm9uLmV4aXN0ZW50c2l0ZS5jb20vdGVzdC1kb2VzbnQtZGVyZWZlcmVuY2UtdGhlc2UtcGF0aHMvZmlsZVNlcXVlbmNlMS50cworI0VYVElORjo1LAoraHR0cHM6Ly9ub24uZXhpc3RlbnRzaXRlLmNvbS90ZXN0LWRvZXNudC1kZXJlZmVyZW5jZS10aGVzZS1wYXRocy9maWxlU2VxdWVuY2UxLnRzCisjRVhULVgtRU5ETElTVApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvZnV6emVyL2h0dHBsaXZlX2Z1enplci5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9mdXp6ZXIvaHR0cGxpdmVfZnV6emVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTc3N2IzCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvZnV6emVyL2h0dHBsaXZlX2Z1enplci5jcHAKQEAgLTAsMCArMSwyOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNsdWRlIDxmdXp6ZXIvRnV6emVkRGF0YVByb3ZpZGVyLmg+CisjaW5jbHVkZSA8TGl2ZURhdGFTb3VyY2UuaD4KKyNpbmNsdWRlIDxMaXZlU2Vzc2lvbi5oPgorI2luY2x1ZGUgPG1lZGlhL01lZGlhSFRUUENvbm5lY3Rpb24uaD4KKyNpbmNsdWRlIDxtZWRpYS9NZWRpYUhUVFBTZXJ2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvbWVkaWFwbGF5ZXJfY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BQnVmZmVyLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BSGFuZGxlci5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUxvb3Blci5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUxvb3BlclJvc3Rlci5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOworCitjb25zdGV4cHIgY2hhciBrRmlsZU5hbWVQcmVmaXhbXSA9ICIvZGF0YS9sb2NhbC90bXAvaHR0cGxpdmUtIjsKK2NvbnN0ZXhwciBjaGFyIGtGaWxlTmFtZVN1ZmZpeFtdID0gIi5tM3U4IjsKK2NvbnN0ZXhwciBjaGFyIGtGaWxlVXJsUHJlZml4W10gPSAiZmlsZTovLyI7Citjb25zdGV4cHIgaW50NjRfdCBrT2ZmU2V0ID0gMDsKK2NvbnN0ZXhwciBpbnQzMl90IGtSZWFkeU1hcmtNcyA9IDUwMDA7Citjb25zdGV4cHIgaW50MzJfdCBrUHJlcGFyZU1hcmtNcyA9IDE1MDA7Citjb25zdGV4cHIgaW50MzJfdCBrRXJyb3JOb01heCA9IC0xOworY29uc3RleHByIGludDMyX3Qga0Vycm9yTm9NaW4gPSAtMzQ7Citjb25zdGV4cHIgaW50MzJfdCBrTWF4VGltZVVzID0gMTAwMDsKK2NvbnN0ZXhwciBpbnQzMl90IGtSYW5kb21TdHJpbmdMZW5ndGggPSA2NDsKK2NvbnN0ZXhwciBpbnQzMl90IGtSYW5nZU1pbiA9IDA7Citjb25zdGV4cHIgaW50MzJfdCBrUmFuZ2VNYXggPSAxMDAwOworCitjb25zdGV4cHIgTGl2ZVNlc3Npb246OlN0cmVhbVR5cGUga1ZhbGlkU3RyZWFtVHlwZVtdID0geworICAgIExpdmVTZXNzaW9uOjpTVFJFQU1UWVBFX0FVRElPLCBMaXZlU2Vzc2lvbjo6U1RSRUFNVFlQRV9WSURFTywKKyAgICBMaXZlU2Vzc2lvbjo6U1RSRUFNVFlQRV9TVUJUSVRMRVMsIExpdmVTZXNzaW9uOjpTVFJFQU1UWVBFX01FVEFEQVRBfTsKKworY29uc3RleHByIE1lZGlhU291cmNlOjpSZWFkT3B0aW9uczo6U2Vla01vZGUga1ZhbGlkU2Vla01vZGVbXSA9IHsKKyAgICBNZWRpYVNvdXJjZTo6UmVhZE9wdGlvbnM6OlNlZWtNb2RlOjpTRUVLX1BSRVZJT1VTX1NZTkMsCisgICAgTWVkaWFTb3VyY2U6OlJlYWRPcHRpb25zOjpTZWVrTW9kZTo6U0VFS19ORVhUX1NZTkMsCisgICAgTWVkaWFTb3VyY2U6OlJlYWRPcHRpb25zOjpTZWVrTW9kZTo6U0VFS19DTE9TRVNUX1NZTkMsCisgICAgTWVkaWFTb3VyY2U6OlJlYWRPcHRpb25zOjpTZWVrTW9kZTo6U0VFS19DTE9TRVNULAorICAgIE1lZGlhU291cmNlOjpSZWFkT3B0aW9uczo6U2Vla01vZGU6OlNFRUtfRlJBTUVfSU5ERVh9OworCitjb25zdGV4cHIgbWVkaWFfdHJhY2tfdHlwZSBrVmFsaWRNZWRpYVRyYWNrVHlwZVtdID0geworICAgIE1FRElBX1RSQUNLX1RZUEVfVU5LTk9XTiwgIE1FRElBX1RSQUNLX1RZUEVfVklERU8sCisgICAgTUVESUFfVFJBQ0tfVFlQRV9BVURJTywgICAgTUVESUFfVFJBQ0tfVFlQRV9USU1FRFRFWFQsCisgICAgTUVESUFfVFJBQ0tfVFlQRV9TVUJUSVRMRSwgTUVESUFfVFJBQ0tfVFlQRV9NRVRBREFUQX07CisKK3N0cnVjdCBUZXN0QUhhbmRsZXIgOiBwdWJsaWMgQUhhbmRsZXIgeworcHVibGljOgorICBUZXN0QUhhbmRsZXIoc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHNpZ25hbEVvc0Z1bmN0aW9uKQorICAgICAgOiBtU2lnbmFsRW9zRnVuY3Rpb24oc2lnbmFsRW9zRnVuY3Rpb24pIHt9CisgIHZpcnR1YWwgflRlc3RBSGFuZGxlcigpIHt9CisKK3Byb3RlY3RlZDoKKyAgdm9pZCBvbk1lc3NhZ2VSZWNlaXZlZChjb25zdCBzcDxBTWVzc2FnZT4gJm1zZykgb3ZlcnJpZGUgeworICAgIGludDMyX3Qgd2hhdCA9IC0xOworICAgIG1zZy0+ZmluZEludDMyKCJ3aGF0IiwgJndoYXQpOworICAgIHN3aXRjaCAod2hhdCkgeworICAgIGNhc2UgTGl2ZVNlc3Npb246OmtXaGF0RXJyb3I6CisgICAgY2FzZSBMaXZlU2Vzc2lvbjo6a1doYXRQcmVwYXJlZDoKKyAgICBjYXNlIExpdmVTZXNzaW9uOjprV2hhdFByZXBhcmF0aW9uRmFpbGVkOiB7CisgICAgICBtU2lnbmFsRW9zRnVuY3Rpb24oKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisgICAgcmV0dXJuOworICB9CisKK3ByaXZhdGU6CisgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBtU2lnbmFsRW9zRnVuY3Rpb247Cit9OworCitzdHJ1Y3QgVGVzdE1lZGlhSFRUUENvbm5lY3Rpb24gOiBwdWJsaWMgTWVkaWFIVFRQQ29ubmVjdGlvbiB7CitwdWJsaWM6CisgIFRlc3RNZWRpYUhUVFBDb25uZWN0aW9uKCkge30KKyAgdmlydHVhbCB+VGVzdE1lZGlhSFRUUENvbm5lY3Rpb24oKSB7fQorCisgIHZpcnR1YWwgYm9vbCBjb25uZWN0KGNvbnN0IGNoYXIgKiAvKnVyaSovLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLZXllZFZlY3RvcjxTdHJpbmc4LCBTdHJpbmc4PiAqIC8qaGVhZGVycyovKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdCgpIHsgcmV0dXJuOyB9CisKKyAgdmlydHVhbCBzc2l6ZV90IHJlYWRBdChvZmY2NF90IC8qb2Zmc2V0Ki8sIHZvaWQgKiAvKmRhdGEqLywgc2l6ZV90IHNpemUpIHsKKyAgICByZXR1cm4gc2l6ZTsKKyAgfQorCisgIHZpcnR1YWwgb2ZmNjRfdCBnZXRTaXplKCkgeyByZXR1cm4gMDsgfQorICB2aXJ0dWFsIHN0YXR1c190IGdldE1JTUVUeXBlKFN0cmluZzggKiAvKm1pbWVUeXBlKi8pIHsgcmV0dXJuIE5PX0VSUk9SOyB9CisgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0VXJpKFN0cmluZzggKiAvKnVyaSovKSB7IHJldHVybiBOT19FUlJPUjsgfQorCitwcml2YXRlOgorICBESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhUZXN0TWVkaWFIVFRQQ29ubmVjdGlvbik7Cit9OworCitzdHJ1Y3QgVGVzdE1lZGlhSFRUUFNlcnZpY2UgOiBwdWJsaWMgTWVkaWFIVFRQU2VydmljZSB7CitwdWJsaWM6CisgIFRlc3RNZWRpYUhUVFBTZXJ2aWNlKCkge30KKyAgflRlc3RNZWRpYUhUVFBTZXJ2aWNlKCl7fTsKKworICB2aXJ0dWFsIHNwPE1lZGlhSFRUUENvbm5lY3Rpb24+IG1ha2VIVFRQQ29ubmVjdGlvbigpIHsKKyAgICBtZWRpYUhUVFBDb25uZWN0aW9uID0gc3A8VGVzdE1lZGlhSFRUUENvbm5lY3Rpb24+OjptYWtlKCk7CisgICAgcmV0dXJuIG1lZGlhSFRUUENvbm5lY3Rpb247CisgIH0KKworcHJpdmF0ZToKKyAgc3A8VGVzdE1lZGlhSFRUUENvbm5lY3Rpb24+IG1lZGlhSFRUUENvbm5lY3Rpb24gPSBudWxscHRyOworICBESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhUZXN0TWVkaWFIVFRQU2VydmljZSk7Cit9OworCitjbGFzcyBIdHRwTGl2ZUZ1enplciB7CitwdWJsaWM6CisgIHZvaWQgcHJvY2Vzcyhjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisgIHZvaWQgZGVJbml0TGl2ZVNlc3Npb24oKTsKKyAgfkh0dHBMaXZlRnV6emVyKCkgeyBkZUluaXRMaXZlU2Vzc2lvbigpOyB9CisKK3ByaXZhdGU6CisgIHZvaWQgaW52b2tlTGl2ZURhdGFTb3VyY2UoKTsKKyAgdm9pZCBjcmVhdGVNM1U4RmlsZShjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisgIHZvaWQgaW5pdExpdmVEYXRhU291cmNlKCk7CisgIHZvaWQgaW52b2tlTGl2ZVNlc3Npb24oKTsKKyAgdm9pZCBpbml0TGl2ZVNlc3Npb24oKTsKKyAgdm9pZCBpbnZva2VEZXF1ZXVlQWNjZXNzVW5pdCgpOworICB2b2lkIGludm9rZUNvbm5lY3RBc3luYygpOworICB2b2lkIGludm9rZVNlZWtUbygpOworICB2b2lkIGludm9rZUdldENvbmZpZygpOworICB2b2lkIHNpZ25hbEVvcygpOworICBzdHJpbmcgZ2VuZXJhdGVGaWxlTmFtZSgpOworICBzcDxMaXZlRGF0YVNvdXJjZT4gbUxpdmVEYXRhU291cmNlID0gbnVsbHB0cjsKKyAgc3A8TGl2ZVNlc3Npb24+IG1MaXZlU2Vzc2lvbiA9IG51bGxwdHI7CisgIHNwPEFMb29wZXI+IG1MaXZlTG9vcGVyID0gbnVsbHB0cjsKKyAgc3A8VGVzdE1lZGlhSFRUUFNlcnZpY2U+IGh0dHBTZXJ2aWNlID0gbnVsbHB0cjsKKyAgc3A8VGVzdEFIYW5kbGVyPiBtSGFuZGxlciA9IG51bGxwdHI7CisgIEZ1enplZERhdGFQcm92aWRlciAqbUZEUCA9IG51bGxwdHI7CisgIGJvb2wgbUVvc1JlYWNoZWQgPSBmYWxzZTsKKyAgc3RkOjptdXRleCBtRG93bmxvYWRDb21wbGV0ZU11dGV4OworICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBtQ29uZGl0aW9uYWxWYXJpYWJsZTsKK307CisKK3N0cmluZyBIdHRwTGl2ZUZ1enplcjo6Z2VuZXJhdGVGaWxlTmFtZSgpIHsKKyAgcmV0dXJuIGtGaWxlTmFtZVByZWZpeCArIHRvX3N0cmluZyhnZXRwaWQoKSkgKyBrRmlsZU5hbWVTdWZmaXg7Cit9CisKK3ZvaWQgSHR0cExpdmVGdXp6ZXI6OmNyZWF0ZU0zVThGaWxlKGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBzaXplKSB7CisgIG9mc3RyZWFtIG0zdThGaWxlOworICBzdHJpbmcgY3VycmVudEZpbGVOYW1lID0gZ2VuZXJhdGVGaWxlTmFtZSgpOworICBtM3U4RmlsZS5vcGVuKGN1cnJlbnRGaWxlTmFtZSwgaW9zOjpvdXQgfCBpb3M6OmJpbmFyeSk7CisgIG0zdThGaWxlLndyaXRlKChjaGFyICopZGF0YSwgc2l6ZSk7CisgIG0zdThGaWxlLmNsb3NlKCk7Cit9CisKK3ZvaWQgSHR0cExpdmVGdXp6ZXI6OmluaXRMaXZlRGF0YVNvdXJjZSgpIHsKKyAgbUxpdmVEYXRhU291cmNlID0gc3A8TGl2ZURhdGFTb3VyY2U+OjptYWtlKCk7Cit9CisKK3ZvaWQgSHR0cExpdmVGdXp6ZXI6Omludm9rZUxpdmVEYXRhU291cmNlKCkgeworICBpbml0TGl2ZURhdGFTb3VyY2UoKTsKKyAgc2l6ZV90IHNpemUgPSBtRkRQLT5Db25zdW1lSW50ZWdyYWxJblJhbmdlPHNpemVfdD4oa1JhbmdlTWluLCBrUmFuZ2VNYXgpOworICBzcDxBQnVmZmVyPiBidWZmZXIgPSBuZXcgQUJ1ZmZlcihzaXplKTsKKyAgbUxpdmVEYXRhU291cmNlLT5xdWV1ZUJ1ZmZlcihidWZmZXIpOworICB1aW50OF90ICpkYXRhID0gbmV3IHVpbnQ4X3Rbc2l6ZV07CisgIG1MaXZlRGF0YVNvdXJjZS0+cmVhZEF0Tm9uQmxvY2tpbmcoa09mZlNldCwgZGF0YSwgc2l6ZSk7CisgIGludDMyX3QgZmluYWxSZXN1bHQgPSBtRkRQLT5Db25zdW1lSW50ZWdyYWxJblJhbmdlKGtFcnJvck5vTWluLCBrRXJyb3JOb01heCk7CisgIG1MaXZlRGF0YVNvdXJjZS0+cXVldWVFT1MoZmluYWxSZXN1bHQpOworICBtTGl2ZURhdGFTb3VyY2UtPnJlc2V0KCk7CisgIG1MaXZlRGF0YVNvdXJjZS0+Y291bnRRdWV1ZWRCdWZmZXJzKCk7CisgIG1MaXZlRGF0YVNvdXJjZS0+aW5pdENoZWNrKCk7CisgIGRlbGV0ZVtdIGRhdGE7Cit9CisKK3ZvaWQgSHR0cExpdmVGdXp6ZXI6OmluaXRMaXZlU2Vzc2lvbigpIHsKKyAgQUxvb3BlclJvc3RlciBsb29wZXJSb3N0ZXI7CisgIG1IYW5kbGVyID0KKyAgICAgIHNwPFRlc3RBSGFuZGxlcj46Om1ha2Uoc3RkOjpiaW5kKCZIdHRwTGl2ZUZ1enplcjo6c2lnbmFsRW9zLCB0aGlzKSk7CisgIG1MaXZlTG9vcGVyID0gc3A8QUxvb3Blcj46Om1ha2UoKTsKKyAgbUxpdmVMb29wZXItPnNldE5hbWUoImh0dHAgbGl2ZSIpOworICBtTGl2ZUxvb3Blci0+c3RhcnQoKTsKKyAgc3A8QU1lc3NhZ2U+IG5vdGlmeSA9IHNwPEFNZXNzYWdlPjo6bWFrZSgwLCBtSGFuZGxlcik7CisgIGh0dHBTZXJ2aWNlID0gbmV3IFRlc3RNZWRpYUhUVFBTZXJ2aWNlKCk7CisgIHVpbnQzMl90IGZsYWdzID0gbUZEUC0+Q29uc3VtZUludGVncmFsPHVpbnQzMl90PigpOworICBtTGl2ZVNlc3Npb24gPSBzcDxMaXZlU2Vzc2lvbj46Om1ha2Uobm90aWZ5LCBmbGFncywgaHR0cFNlcnZpY2UpOworICBtTGl2ZUxvb3Blci0+cmVnaXN0ZXJIYW5kbGVyKG1MaXZlU2Vzc2lvbik7CisgIGxvb3BlclJvc3Rlci5yZWdpc3RlckhhbmRsZXIobUxpdmVMb29wZXIsIG1IYW5kbGVyKTsKK30KKwordm9pZCBIdHRwTGl2ZUZ1enplcjo6aW52b2tlRGVxdWV1ZUFjY2Vzc1VuaXQoKSB7CisgIExpdmVTZXNzaW9uOjpTdHJlYW1UeXBlIHN0cmVhbSA9IG1GRFAtPlBpY2tWYWx1ZUluQXJyYXkoa1ZhbGlkU3RyZWFtVHlwZSk7CisgIHNwPEFCdWZmZXI+IGJ1ZmZlcjsKKyAgbUxpdmVTZXNzaW9uLT5kZXF1ZXVlQWNjZXNzVW5pdChzdHJlYW0sICZidWZmZXIpOworfQorCit2b2lkIEh0dHBMaXZlRnV6emVyOjppbnZva2VTZWVrVG8oKSB7CisgIGludDY0X3QgdGltZVVzID0gbUZEUC0+Q29uc3VtZUludGVncmFsSW5SYW5nZTxpbnQ2NF90PigwLCBrTWF4VGltZVVzKTsKKyAgTWVkaWFTb3VyY2U6OlJlYWRPcHRpb25zOjpTZWVrTW9kZSBtb2RlID0KKyAgICAgIG1GRFAtPlBpY2tWYWx1ZUluQXJyYXkoa1ZhbGlkU2Vla01vZGUpOworICBtTGl2ZVNlc3Npb24tPnNlZWtUbyh0aW1lVXMsIG1vZGUpOworfQorCit2b2lkIEh0dHBMaXZlRnV6emVyOjppbnZva2VHZXRDb25maWcoKSB7CisgIG1MaXZlU2Vzc2lvbi0+Z2V0VHJhY2tDb3VudCgpOworICBzaXplX3QgdHJhY2tJbmRleCA9IG1GRFAtPkNvbnN1bWVJbnRlZ3JhbDxzaXplX3Q+KCk7CisgIG1MaXZlU2Vzc2lvbi0+Z2V0VHJhY2tJbmZvKHRyYWNrSW5kZXgpOworICBtZWRpYV90cmFja190eXBlIHR5cGUgPSBtRkRQLT5QaWNrVmFsdWVJbkFycmF5KGtWYWxpZE1lZGlhVHJhY2tUeXBlKTsKKyAgbUxpdmVTZXNzaW9uLT5nZXRTZWxlY3RlZFRyYWNrKHR5cGUpOworICBzcDxNZXRhRGF0YT4gbWV0YTsKKyAgTGl2ZVNlc3Npb246OlN0cmVhbVR5cGUgc3RyZWFtID0gbUZEUC0+UGlja1ZhbHVlSW5BcnJheShrVmFsaWRTdHJlYW1UeXBlKTsKKyAgbUxpdmVTZXNzaW9uLT5nZXRTdHJlYW1Gb3JtYXRNZXRhKHN0cmVhbSwgJm1ldGEpOworICBtTGl2ZVNlc3Npb24tPmdldEtleUZvclN0cmVhbShzdHJlYW0pOworICBpZiAoc3RyZWFtICE9IExpdmVTZXNzaW9uOjpTVFJFQU1UWVBFX1NVQlRJVExFUykgeworICAgIG1MaXZlU2Vzc2lvbi0+Z2V0U291cmNlVHlwZUZvclN0cmVhbShzdHJlYW0pOworICB9Cit9CisKK3ZvaWQgSHR0cExpdmVGdXp6ZXI6Omludm9rZUNvbm5lY3RBc3luYygpIHsKKyAgc3RyaW5nIGN1cnJlbnRGaWxlTmFtZSA9IGdlbmVyYXRlRmlsZU5hbWUoKTsKKyAgc3RyaW5nIHVybCA9IGtGaWxlVXJsUHJlZml4ICsgY3VycmVudEZpbGVOYW1lOworICBzdHJpbmcgc3RyXzEgPSBtRkRQLT5Db25zdW1lUmFuZG9tTGVuZ3RoU3RyaW5nKGtSYW5kb21TdHJpbmdMZW5ndGgpOworICBzdHJpbmcgc3RyXzIgPSBtRkRQLT5Db25zdW1lUmFuZG9tTGVuZ3RoU3RyaW5nKGtSYW5kb21TdHJpbmdMZW5ndGgpOworCisgIEtleWVkVmVjdG9yPFN0cmluZzgsIFN0cmluZzg+IGhlYWRlcnM7CisgIGhlYWRlcnMuYWRkKFN0cmluZzgoc3RyXzEuY19zdHIoKSksIFN0cmluZzgoc3RyXzIuY19zdHIoKSkpOworICBtTGl2ZVNlc3Npb24tPmNvbm5lY3RBc3luYyh1cmwuY19zdHIoKSwgJmhlYWRlcnMpOworfQorCit2b2lkIEh0dHBMaXZlRnV6emVyOjppbnZva2VMaXZlU2Vzc2lvbigpIHsKKyAgaW5pdExpdmVTZXNzaW9uKCk7CisgIEJ1ZmZlcmluZ1NldHRpbmdzIGJ1ZmZlcmluZ1NldHRpbmdzOworICBidWZmZXJpbmdTZXR0aW5ncy5tSW5pdGlhbE1hcmtNcyA9IGtQcmVwYXJlTWFya01zOworICBidWZmZXJpbmdTZXR0aW5ncy5tUmVzdW1lUGxheWJhY2tNYXJrTXMgPSBrUmVhZHlNYXJrTXM7CisgIG1MaXZlU2Vzc2lvbi0+c2V0QnVmZmVyaW5nU2V0dGluZ3MoYnVmZmVyaW5nU2V0dGluZ3MpOworICBpbnZva2VDb25uZWN0QXN5bmMoKTsKKyAgc3RkOjp1bmlxdWVfbG9jayB3YWl0Rm9yRG93bmxvYWRDb21wbGV0ZShtRG93bmxvYWRDb21wbGV0ZU11dGV4KTsKKyAgbUNvbmRpdGlvbmFsVmFyaWFibGUud2FpdCh3YWl0Rm9yRG93bmxvYWRDb21wbGV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhpc10geyByZXR1cm4gbUVvc1JlYWNoZWQ7IH0pOworICBpZiAobUxpdmVTZXNzaW9uLT5pc1NlZWthYmxlKCkpIHsKKyAgICBpbnZva2VTZWVrVG8oKTsKKyAgfQorICBpbnZva2VEZXF1ZXVlQWNjZXNzVW5pdCgpOworICBzaXplX3QgaW5kZXggPSBtRkRQLT5Db25zdW1lSW50ZWdyYWw8c2l6ZV90PigpOworICBib29sIHNlbGVjdCA9IG1GRFAtPkNvbnN1bWVCb29sKCk7CisgIG1MaXZlU2Vzc2lvbi0+c2VsZWN0VHJhY2soaW5kZXgsIHNlbGVjdCk7CisgIG1MaXZlU2Vzc2lvbi0+aGFzRHluYW1pY0R1cmF0aW9uKCk7CisgIGludDY0X3QgZmlyc3RUaW1lVXMgPQorICAgICAgbUZEUC0+Q29uc3VtZUludGVncmFsSW5SYW5nZTxpbnQ2NF90PihrUmFuZ2VNaW4sIGtSYW5nZU1heCk7CisgIGludDY0X3QgdGltZVVzID0gbUZEUC0+Q29uc3VtZUludGVncmFsSW5SYW5nZTxpbnQ2NF90PihrUmFuZ2VNaW4sIGtSYW5nZU1heCk7CisgIGludDMyX3QgZGlzY29udGludWl0eVNlcSA9IG1GRFAtPkNvbnN1bWVJbnRlZ3JhbDxpbnQzMl90PigpOworICBtTGl2ZVNlc3Npb24tPmNhbGN1bGF0ZU1lZGlhVGltZVVzKGZpcnN0VGltZVVzLCB0aW1lVXMsIGRpc2NvbnRpbnVpdHlTZXEpOworICBpbnZva2VHZXRDb25maWcoKTsKK30KKwordm9pZCBIdHRwTGl2ZUZ1enplcjo6cHJvY2Vzcyhjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSkgeworICBtRkRQID0gbmV3IEZ1enplZERhdGFQcm92aWRlcihkYXRhLCBzaXplKTsKKyAgY3JlYXRlTTNVOEZpbGUoZGF0YSwgc2l6ZSk7CisgIGludm9rZUxpdmVEYXRhU291cmNlKCk7CisgIGludm9rZUxpdmVTZXNzaW9uKCk7CisgIGRlbGV0ZSBtRkRQOworfQorCit2b2lkIEh0dHBMaXZlRnV6emVyOjpkZUluaXRMaXZlU2Vzc2lvbigpIHsKKyAgaWYgKG1MaXZlU2Vzc2lvbiAhPSBudWxscHRyKSB7CisgICAgbUxpdmVTZXNzaW9uLT5kaXNjb25uZWN0KCk7CisgICAgbUxpdmVMb29wZXItPnVucmVnaXN0ZXJIYW5kbGVyKG1MaXZlU2Vzc2lvbi0+aWQoKSk7CisgICAgbUxpdmVMb29wZXItPnN0b3AoKTsKKyAgfQorICBtTGl2ZVNlc3Npb24uY2xlYXIoKTsKKyAgbUxpdmVMb29wZXIuY2xlYXIoKTsKK30KKwordm9pZCBIdHRwTGl2ZUZ1enplcjo6c2lnbmFsRW9zKCkgeworICBtRW9zUmVhY2hlZCA9IHRydWU7CisgIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gd2FpdEZvckRvd25sb2FkQ29tcGxldGUobURvd25sb2FkQ29tcGxldGVNdXRleCk7CisgIH0KKyAgbUNvbmRpdGlvbmFsVmFyaWFibGUubm90aWZ5X29uZSgpOworICByZXR1cm47Cit9CisKK2V4dGVybiAiQyIgaW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgSHR0cExpdmVGdXp6ZXIgaHR0cGxpdmVGdXp6ZXI7CisgIGh0dHBsaXZlRnV6emVyLnByb2Nlc3MoZGF0YSwgc2l6ZSk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvZnV6emVyL2h0dHBsaXZlX2Z1enplci5kaWN0IGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvZnV6emVyL2h0dHBsaXZlX2Z1enplci5kaWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwM2NjN2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9mdXp6ZXIvaHR0cGxpdmVfZnV6emVyLmRpY3QKQEAgLTAsMCArMSwxNSBAQAorI20zdTgtVGFncwora3cxPSIjRVhUTTNVIgora3cyPSIjRVhULVgtVkVSU0lPTjoiCitrdzM9IiNFWFQtWC1UQVJHRVREVVJBVElPTjoiCitrdzQ9IiNFWFQtWC1QTEFZTElTVC1UWVBFOiIKK2t3NT0iI0VYVElORjoiCitrdzY9IiNFWFQtWC1FTkRMSVNUIgora3c3PSIjRVhULVgtTUVESUEtU0VRVUVOQ0U6Igora3c4PSIjRVhULVgtS0VZOk1FVEhPRD1OT05FIgora3c5PSIjRVhULVgtRElTQ09OVElOVUlUWToiCitrdzEwPSIjRVhULVgtRElTQ09OVElOVUlUWS1TRVFVRU5DRTowIgora3cxMT0iI0VYVC1YLVNUUkVBTS1JTkY6QkFORFdJRFRIPSIKK2t3MTI9IiNFWFQtWC1TVFJFQU0tSU5GOkNPREVDUz0iCitrdzEzPSIjRVhULVgtQllURVJBTkdFOiIKK2t3MTQ9IiNFWFQtWC1NRURJQSIKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvQUNvZGVjLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L0FDb2RlYy5oCmluZGV4IGM4NGNjMTAuLjYzMmIzMmMgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvQUNvZGVjLmgKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9BQ29kZWMuaApAQCAtNzEsNiArNzEsOSBAQAogICAgIHZpcnR1YWwgdm9pZCBpbml0aWF0ZVNldElucHV0U3VyZmFjZShjb25zdCBzcDxQZXJzaXN0ZW50U3VyZmFjZT4gJnN1cmZhY2UpOwogICAgIHZpcnR1YWwgdm9pZCBpbml0aWF0ZVN0YXJ0KCk7CiAgICAgdmlydHVhbCB2b2lkIGluaXRpYXRlU2h1dGRvd24oYm9vbCBrZWVwQ29tcG9uZW50QWxsb2NhdGVkID0gZmFsc2UpOworICAgIHZpcnR1YWwgc3RhdHVzX3QgcXVlcnlTdXBwb3J0ZWRQYXJhbWV0ZXJzKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAqbmFtZXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3Vic2NyaWJlVG9QYXJhbWV0ZXJzKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAmbmFtZXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgc3RhdHVzX3QgdW5zdWJzY3JpYmVGcm9tUGFyYW1ldGVycyhjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJm5hbWVzKSBvdmVycmlkZTsKIAogICAgIHN0YXR1c190IHF1ZXJ5Q2FwYWJpbGl0aWVzKAogICAgICAgICAgICAgY29uc3QgY2hhciogb3duZXIsIGNvbnN0IGNoYXIqIG5hbWUsCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC90ZXN0cy9mdXp6ZXJzL0FuZHJvaWQuYnAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC90ZXN0cy9mdXp6ZXJzL0FuZHJvaWQuYnAKaW5kZXggMDA5NzgzMC4uZWExN2E0ZCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvdGVzdHMvZnV6emVycy9BbmRyb2lkLmJwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3Rlc3RzL2Z1enplcnMvQW5kcm9pZC5icApAQCAtODYsOSArODYsNiBAQAogICAgIGRpY3Rpb25hcnk6ICJkaWN0aW9uYXJpZXMvZm9ybWF0cy5kaWN0IiwKICAgICBkZWZhdWx0czogWyJsaWJzdGFnZWZyaWdodF9mdXp6ZXJfZGVmYXVsdHMiXSwKICAgICBzdGF0aWNfbGliczogWwotICAgICAgICAibGlic3RhZ2VmcmlnaHRfd2VibSIsCiAgICAgICAgICJsaWJkYXRhc291cmNlIiwKLSAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2VzZHMiLAotICAgICAgICAibGlib2dnIiwKICAgICBdLAogfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbmRrL05ka01lZGlhQ29kZWMuY3BwIGIvbWVkaWEvbmRrL05ka01lZGlhQ29kZWMuY3BwCmluZGV4IDFhZTJiNDQuLjBlMmRlNGUgMTAwNjQ0Ci0tLSBhL21lZGlhL25kay9OZGtNZWRpYUNvZGVjLmNwcAorKysgYi9tZWRpYS9uZGsvTmRrTWVkaWFDb2RlYy5jcHAKQEAgLTQ1MiwxNyArNDUyLDE5IEBACiAgICAgICAgIHVpbnQzMl90IGZsYWdzKSB7CiAgICAgc3A8QU1lc3NhZ2U+IG5hdGl2ZUZvcm1hdDsKICAgICBBTWVkaWFGb3JtYXRfZ2V0Rm9ybWF0KGZvcm1hdCwgJm5hdGl2ZUZvcm1hdCk7Ci0gICAgQUxPR1YoImNvbmZpZ3VyZSB3aXRoIGZvcm1hdDogJXMiLCBuYXRpdmVGb3JtYXQtPmRlYnVnU3RyaW5nKDApLmNfc3RyKCkpOworICAgIC8vIGNyZWF0ZSBvdXIgc2hhbGxvdyBjb3B5LCBzbyB3ZSBhcmVuJ3QgdmljdGltIHRvIGFueSBsYXRlciBjaGFuZ2VzLgorICAgIHNwPEFNZXNzYWdlPiBkdXBOYXRpdmVGb3JtYXQgPSBuYXRpdmVGb3JtYXQtPmR1cCgpOworICAgIEFMT0dWKCJjb25maWd1cmUgd2l0aCBmb3JtYXQ6ICVzIiwgZHVwTmF0aXZlRm9ybWF0LT5kZWJ1Z1N0cmluZygwKS5jX3N0cigpKTsKICAgICBzcDxTdXJmYWNlPiBzdXJmYWNlID0gTlVMTDsKICAgICBpZiAod2luZG93ICE9IE5VTEwpIHsKICAgICAgICAgc3VyZmFjZSA9IChTdXJmYWNlKikgd2luZG93OwogICAgIH0KIAotICAgIHN0YXR1c190IGVyciA9IG1EYXRhLT5tQ29kZWMtPmNvbmZpZ3VyZShuYXRpdmVGb3JtYXQsIHN1cmZhY2UsCisgICAgc3RhdHVzX3QgZXJyID0gbURhdGEtPm1Db2RlYy0+Y29uZmlndXJlKGR1cE5hdGl2ZUZvcm1hdCwgc3VyZmFjZSwKICAgICAgICAgICAgIGNyeXB0byA/IGNyeXB0by0+bUNyeXB0byA6IE5VTEwsIGZsYWdzKTsKICAgICBpZiAoZXJyICE9IE9LKSB7CiAgICAgICAgIEFMT0dFKCJjb25maWd1cmU6IGVyciglZCksIGZhaWxlZCB3aXRoIGZvcm1hdDogJXMiLAotICAgICAgICAgICAgICBlcnIsIG5hdGl2ZUZvcm1hdC0+ZGVidWdTdHJpbmcoMCkuY19zdHIoKSk7CisgICAgICAgICAgICAgIGVyciwgZHVwTmF0aXZlRm9ybWF0LT5kZWJ1Z1N0cmluZygwKS5jX3N0cigpKTsKICAgICB9CiAgICAgcmV0dXJuIHRyYW5zbGF0ZV9lcnJvcihlcnIpOwogfQpkaWZmIC0tZ2l0IGEvbWVkaWEvdGVzdHMvU2FtcGxlVmlkZW9FbmNvZGVyL2FwcC9zcmMvbWFpbi9BbmRyb2lkTWFuaWZlc3QueG1sIGIvbWVkaWEvdGVzdHMvU2FtcGxlVmlkZW9FbmNvZGVyL2FwcC9zcmMvbWFpbi9BbmRyb2lkTWFuaWZlc3QueG1sCmluZGV4IGIxNzU0MWQuLjc1ZDczYmYgMTAwNjQ0Ci0tLSBhL21lZGlhL3Rlc3RzL1NhbXBsZVZpZGVvRW5jb2Rlci9hcHAvc3JjL21haW4vQW5kcm9pZE1hbmlmZXN0LnhtbAorKysgYi9tZWRpYS90ZXN0cy9TYW1wbGVWaWRlb0VuY29kZXIvYXBwL3NyYy9tYWluL0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTMwLDcgKzMwLDggQEAKICAgICAgICAgYW5kcm9pZDpyb3VuZEljb249IkBtaXBtYXAvaWNfbGF1bmNoZXJfcm91bmQiCiAgICAgICAgIGFuZHJvaWQ6c3VwcG9ydHNSdGw9InRydWUiCiAgICAgICAgIGFuZHJvaWQ6dGhlbWU9IkBzdHlsZS9BcHBUaGVtZSI+Ci0gICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9ImNvbS5hbmRyb2lkLm1lZGlhLnNhbXBsZXZpZGVvZW5jb2Rlci5NYWluQWN0aXZpdHkiPgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJjb20uYW5kcm9pZC5tZWRpYS5zYW1wbGV2aWRlb2VuY29kZXIuTWFpbkFjdGl2aXR5IgorICAgICAgICAgICAgYW5kcm9pZDpleHBvcnRlZD0idHJ1ZSI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CiAgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVIiIC8+CkBAIC00Miw0ICs0Myw0IEBACiAgICAgICAgIGFuZHJvaWQ6dGFyZ2V0UGFja2FnZT0iY29tLmFuZHJvaWQubWVkaWEuc2FtcGxldmlkZW9lbmNvZGVyIgogICAgICAgICBhbmRyb2lkOmxhYmVsPSJTYW1wbGVWaWRlb0VuY29kZXIgVGVzdCIvPgogCi08L21hbmlmZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvbWFuaWZlc3Q+CmRpZmYgLS1naXQgYS9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvTWVkaWFCZW5jaG1hcmtUZXN0L0FuZHJvaWQuYnAgYi9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvTWVkaWFCZW5jaG1hcmtUZXN0L0FuZHJvaWQuYnAKaW5kZXggMmUwNmRhNS4uNGI0NGRjZiAxMDA2NDQKLS0tIGEvbWVkaWEvdGVzdHMvYmVuY2htYXJrL01lZGlhQmVuY2htYXJrVGVzdC9BbmRyb2lkLmJwCisrKyBiL21lZGlhL3Rlc3RzL2JlbmNobWFyay9NZWRpYUJlbmNobWFya1Rlc3QvQW5kcm9pZC5icApAQCAtNjksNyArNjksNiBAQAogamF2YV9kZWZhdWx0cyB7CiAgICAgbmFtZTogIk1lZGlhQmVuY2htYXJrLWRlZmF1bHRzIiwKIAotICAgIHNka192ZXJzaW9uOiAic3lzdGVtX2N1cnJlbnQiLAogICAgIG1pbl9zZGtfdmVyc2lvbjogIjI4IiwKLSAgICB0YXJnZXRfc2RrX3ZlcnNpb246ICIyOSIsCisgICAgdGFyZ2V0X3Nka192ZXJzaW9uOiAiMzAiLAogfQpkaWZmIC0tZ2l0IGEvbWVkaWEvdGVzdHMvYmVuY2htYXJrL01lZGlhQmVuY2htYXJrVGVzdC9idWlsZC5ncmFkbGUgYi9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvTWVkaWFCZW5jaG1hcmtUZXN0L2J1aWxkLmdyYWRsZQppbmRleCBiMmFlZTFhLi5iMjIyZDQ3IDEwMDY0NAotLS0gYS9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvTWVkaWFCZW5jaG1hcmtUZXN0L2J1aWxkLmdyYWRsZQorKysgYi9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvTWVkaWFCZW5jaG1hcmtUZXN0L2J1aWxkLmdyYWRsZQpAQCAtMTcsMjEgKzE3LDIxIEBACiBidWlsZHNjcmlwdCB7CiAgICAgcmVwb3NpdG9yaWVzIHsKICAgICAgICAgZ29vZ2xlKCkKLSAgICAgICAgamNlbnRlcigpCisgICAgICAgIG1hdmVuQ2VudHJhbCgpCiAgICAgfQogICAgIGRlcGVuZGVuY2llcyB7Ci0gICAgICAgIGNsYXNzcGF0aCAnY29tLmFuZHJvaWQudG9vbHMuYnVpbGQ6Z3JhZGxlOjMuNS4wJworICAgICAgICBjbGFzc3BhdGggJ2NvbS5hbmRyb2lkLnRvb2xzLmJ1aWxkOmdyYWRsZTo0LjIuMScKICAgICB9CiB9CiAKIGFwcGx5IHBsdWdpbjogJ2NvbS5hbmRyb2lkLmFwcGxpY2F0aW9uJwogCiBhbmRyb2lkIHsKLSAgICBjb21waWxlU2RrVmVyc2lvbiAyOQorICAgIGNvbXBpbGVTZGtWZXJzaW9uIDMwCiAgICAgZGVmYXVsdENvbmZpZyB7CiAgICAgICAgIGFwcGxpY2F0aW9uSWQgImNvbS5hbmRyb2lkLm1lZGlhLmJlbmNobWFyayIKICAgICAgICAgbWluU2RrVmVyc2lvbiAyOAotICAgICAgICB0YXJnZXRTZGtWZXJzaW9uIDI5CisgICAgICAgIHRhcmdldFNka1ZlcnNpb24gMzAKICAgICAgICAgdmVyc2lvbkNvZGUgMQogICAgICAgICB2ZXJzaW9uTmFtZSAiMS4wIgogICAgICAgICB0ZXN0SW5zdHJ1bWVudGF0aW9uUnVubmVyICJhbmRyb2lkeC50ZXN0LnJ1bm5lci5BbmRyb2lkSlVuaXRSdW5uZXIiCkBAIC01NywyMCArNTcsMjAgQEAKICAgICBleHRlcm5hbE5hdGl2ZUJ1aWxkIHsKICAgICAgICAgY21ha2UgewogICAgICAgICAgICAgcGF0aCAic3JjL21haW4vY3BwL0NNYWtlTGlzdHMudHh0IgotICAgICAgICAgICAgdmVyc2lvbiAiMy4xMC4yIgorICAgICAgICAgICAgdmVyc2lvbiAiMy4xOC4xIgogICAgICAgICB9CiAgICAgfQogfQogCiByZXBvc2l0b3JpZXMgewogICAgIGdvb2dsZSgpCi0gICAgamNlbnRlcigpCisgICAgbWF2ZW5DZW50cmFsKCkKIH0KIAogZGVwZW5kZW5jaWVzIHsKICAgICBpbXBsZW1lbnRhdGlvbiBmaWxlVHJlZShkaXI6ICdsaWJzJywgaW5jbHVkZTogWycqLmphciddKQotICAgIGltcGxlbWVudGF0aW9uICdhbmRyb2lkeC5hcHBjb21wYXQ6YXBwY29tcGF0OjEuMS4wJwotICAgIHRlc3RJbXBsZW1lbnRhdGlvbiAnanVuaXQ6anVuaXQ6NC4xMicKLSAgICBhbmRyb2lkVGVzdEltcGxlbWVudGF0aW9uICdhbmRyb2lkeC50ZXN0OnJ1bm5lcjoxLjIuMCcKLSAgICBhbmRyb2lkVGVzdEltcGxlbWVudGF0aW9uICdhbmRyb2lkeC50ZXN0LmV4dDpqdW5pdDoxLjEuMScKKyAgICBpbXBsZW1lbnRhdGlvbiAnYW5kcm9pZHguYXBwY29tcGF0OmFwcGNvbXBhdDoxLjMuMCcKKyAgICB0ZXN0SW1wbGVtZW50YXRpb24gJ2p1bml0Omp1bml0OjQuMTMuMicKKyAgICBhbmRyb2lkVGVzdEltcGxlbWVudGF0aW9uICdhbmRyb2lkeC50ZXN0OnJ1bm5lcjoxLjMuMCcKKyAgICBhbmRyb2lkVGVzdEltcGxlbWVudGF0aW9uICdhbmRyb2lkeC50ZXN0LmV4dDpqdW5pdDoxLjEuMicKIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvTWVkaWFCZW5jaG1hcmtUZXN0L3NyYy9tYWluL2NwcC9BbmRyb2lkLmJwIGIvbWVkaWEvdGVzdHMvYmVuY2htYXJrL01lZGlhQmVuY2htYXJrVGVzdC9zcmMvbWFpbi9jcHAvQW5kcm9pZC5icAppbmRleCBhZjkyNDI0Li4wMTkyZDY4IDEwMDY0NAotLS0gYS9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvTWVkaWFCZW5jaG1hcmtUZXN0L3NyYy9tYWluL2NwcC9BbmRyb2lkLmJwCisrKyBiL21lZGlhL3Rlc3RzL2JlbmNobWFyay9NZWRpYUJlbmNobWFya1Rlc3Qvc3JjL21haW4vY3BwL0FuZHJvaWQuYnAKQEAgLTksNyArOSw2IEBACiAKIGNjX3Rlc3RfbGlicmFyeSB7CiAgICAgbmFtZTogImxpYm1lZGlhYmVuY2htYXJrX2puaSIsCi0gICAgc2RrX3ZlcnNpb246ICJjdXJyZW50IiwKIAogICAgIGRlZmF1bHRzOiBbCiAgICAgICAgICJsaWJtZWRpYWJlbmNobWFya19jb21tb24tZGVmYXVsdHMiLApkaWZmIC0tZ2l0IGEvbWVkaWEvdGVzdHMvYmVuY2htYXJrL3NyYy9uYXRpdmUvY29tbW9uL0FuZHJvaWQuYnAgYi9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvc3JjL25hdGl2ZS9jb21tb24vQW5kcm9pZC5icAppbmRleCA2YjU0YzZhLi43MThkMjE3IDEwMDY0NAotLS0gYS9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvc3JjL25hdGl2ZS9jb21tb24vQW5kcm9pZC5icAorKysgYi9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvc3JjL25hdGl2ZS9jb21tb24vQW5kcm9pZC5icApAQCAtNTUsNyArNTUsNiBAQAogCiBjY19kZWZhdWx0cyB7CiAgICAgbmFtZTogImxpYm1lZGlhYmVuY2htYXJrLWRlZmF1bHRzIiwKLSAgICBzZGtfdmVyc2lvbjogImN1cnJlbnQiLAogICAgIHN0bDogImMrK19zaGFyZWQiLAogCiAgICAgc2hhcmVkX2xpYnM6IFsKZGlmZiAtLWdpdCBhL21lZGlhL3Rlc3RzL2JlbmNobWFyay9zcmMvbmF0aXZlL2V4dHJhY3Rvci9FeHRyYWN0b3IuY3BwIGIvbWVkaWEvdGVzdHMvYmVuY2htYXJrL3NyYy9uYXRpdmUvZXh0cmFjdG9yL0V4dHJhY3Rvci5jcHAKaW5kZXggZjBiYjNiOS4uM2JkZmJhZCAxMDA2NDQKLS0tIGEvbWVkaWEvdGVzdHMvYmVuY2htYXJrL3NyYy9uYXRpdmUvZXh0cmFjdG9yL0V4dHJhY3Rvci5jcHAKKysrIGIvbWVkaWEvdGVzdHMvYmVuY2htYXJrL3NyYy9uYXRpdmUvZXh0cmFjdG9yL0V4dHJhY3Rvci5jcHAKQEAgLTEyNCw5ICsxMjQsNyBAQAogCiAgICAgaW50NjRfdCBzVGltZSA9IG1TdGF0cy0+Z2V0Q3VyVGltZSgpOwogICAgIGlmIChtRXh0cmFjdG9yKSB7Ci0gICAgICAgIC8vIFRPRE86IChiLzE0MDEyODUwNSkgTXVsdGlwbGUgY2FsbHMgcmVzdWx0IGluIERvUy4KLSAgICAgICAgLy8gVW5jb21tZW50IGNhbGwgdG8gQU1lZGlhRXh0cmFjdG9yX2RlbGV0ZSgpIG9uY2UgdGhpcyBpcyByZXNvbHZlZAotICAgICAgICAvLyBBTWVkaWFFeHRyYWN0b3JfZGVsZXRlKG1FeHRyYWN0b3IpOworICAgICAgICBBTWVkaWFFeHRyYWN0b3JfZGVsZXRlKG1FeHRyYWN0b3IpOwogICAgICAgICBtRXh0cmFjdG9yID0gbnVsbHB0cjsKICAgICB9CiAgICAgaW50NjRfdCBlVGltZSA9IG1TdGF0cy0+Z2V0Q3VyVGltZSgpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvdGVzdHMvYmVuY2htYXJrL3Rlc3RzL0FuZHJvaWQuYnAgYi9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvdGVzdHMvQW5kcm9pZC5icAppbmRleCAwZmJkMjBkLi45YThjYWEzIDEwMDY0NAotLS0gYS9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvdGVzdHMvQW5kcm9pZC5icAorKysgYi9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvdGVzdHMvQW5kcm9pZC5icApAQCAtMzMsNyArMzMsMTIgQEAKIAogICAgIHNyY3M6IFsiRXh0cmFjdG9yVGVzdC5jcHAiXSwKIAotICAgIHN0YXRpY19saWJzOiBbImxpYm1lZGlhYmVuY2htYXJrX2V4dHJhY3RvciJdCisgICAgc3RhdGljX2xpYnM6IFsibGlibWVkaWFiZW5jaG1hcmtfZXh0cmFjdG9yIl0sCisKKyAgICBzaGFyZWRfbGliczogWworICAgICAgICAibGliYmFzZSIsCisgICAgICAgICJsaWJiaW5kZXJfbmRrIiwKKyAgICBdLAogfQogCiBjY190ZXN0IHsKQEAgLTUwLDYgKzU1LDExIEBACiAgICAgICAgICJsaWJtZWRpYWJlbmNobWFya19leHRyYWN0b3IiLAogICAgICAgICAibGlibWVkaWFiZW5jaG1hcmtfZGVjb2RlciIsCiAgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJiYXNlIiwKKyAgICAgICAgImxpYmJpbmRlcl9uZGsiLAorICAgIF0sCiB9CiAKIGNjX3Rlc3QgewpkaWZmIC0tZ2l0IGEvbWVkaWEvdGVzdHMvYmVuY2htYXJrL3Rlc3RzL0RlY29kZXJUZXN0LmNwcCBiL21lZGlhL3Rlc3RzL2JlbmNobWFyay90ZXN0cy9EZWNvZGVyVGVzdC5jcHAKaW5kZXggODFlZjAyYS4uMzY2NjcyNCAxMDA2NDQKLS0tIGEvbWVkaWEvdGVzdHMvYmVuY2htYXJrL3Rlc3RzL0RlY29kZXJUZXN0LmNwcAorKysgYi9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvdGVzdHMvRGVjb2RlclRlc3QuY3BwCkBAIC0yMSw2ICsyMSw4IEBACiAjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8bGltaXRzPgogCisjaW5jbHVkZSA8YW5kcm9pZC9iaW5kZXJfcHJvY2Vzcy5oPgorCiAjaW5jbHVkZSAiQmVuY2htYXJrVGVzdEVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiRGVjb2Rlci5oIgogCkBAIC0xNzUsNiArMTc3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImMyLmFuZHJvaWQuaGV2Yy5kZWNvZGVyIiwgdHJ1ZSkpKTsKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CisgICAgQUJpbmRlclByb2Nlc3Nfc3RhcnRUaHJlYWRQb29sKCk7CiAgICAgZ0VudiA9IG5ldyBCZW5jaG1hcmtUZXN0RW52aXJvbm1lbnQoKTsKICAgICA6OnRlc3Rpbmc6OkFkZEdsb2JhbFRlc3RFbnZpcm9ubWVudChnRW52KTsKICAgICA6OnRlc3Rpbmc6OkluaXRHb29nbGVUZXN0KCZhcmdjLCBhcmd2KTsKZGlmZiAtLWdpdCBhL21lZGlhL3Rlc3RzL2JlbmNobWFyay90ZXN0cy9FeHRyYWN0b3JUZXN0LmNwcCBiL21lZGlhL3Rlc3RzL2JlbmNobWFyay90ZXN0cy9FeHRyYWN0b3JUZXN0LmNwcAppbmRleCBkMTRkMTViLi4yN2VlOWJhIDEwMDY0NAotLS0gYS9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvdGVzdHMvRXh0cmFjdG9yVGVzdC5jcHAKKysrIGIvbWVkaWEvdGVzdHMvYmVuY2htYXJrL3Rlc3RzL0V4dHJhY3RvclRlc3QuY3BwCkBAIC0xOSw2ICsxOSw4IEBACiAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCisjaW5jbHVkZSA8YW5kcm9pZC9iaW5kZXJfcHJvY2Vzcy5oPgorCiAjaW5jbHVkZSAiQmVuY2htYXJrVGVzdEVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiRXh0cmFjdG9yLmgiCiAKQEAgLTczLDYgKzc1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpKTsKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CisgICAgQUJpbmRlclByb2Nlc3Nfc3RhcnRUaHJlYWRQb29sKCk7CiAgICAgZ0VudiA9IG5ldyBCZW5jaG1hcmtUZXN0RW52aXJvbm1lbnQoKTsKICAgICA6OnRlc3Rpbmc6OkFkZEdsb2JhbFRlc3RFbnZpcm9ubWVudChnRW52KTsKICAgICA6OnRlc3Rpbmc6OkluaXRHb29nbGVUZXN0KCZhcmdjLCBhcmd2KTsKZGlmZiAtLWdpdCBhL21lZGlhL3V0aWxzL0FuZHJvaWQuYnAgYi9tZWRpYS91dGlscy9BbmRyb2lkLmJwCmluZGV4IDczYzRlM2IuLjg4YjgyMmQgMTAwNjQ0Ci0tLSBhL21lZGlhL3V0aWxzL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvdXRpbHMvQW5kcm9pZC5icApAQCAtNTEsNiArNTEsNyBAQAogICAgICAgICAibGlicGVybWlzc2lvbiIsCiAgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmdyYXBoaWNzLmJ1ZmZlcnF1ZXVlQDEuMCIsCiAgICAgICAgICJhbmRyb2lkLmhpZGwudG9rZW5AMS4wLXV0aWxzIiwKKyAgICAgICAgInBhY2thZ2VtYW5hZ2VyX2FpZGwtY3BwIiwKICAgICBdLAogICAgIGV4cG9ydF9zdGF0aWNfbGliX2hlYWRlcnM6IFsKICAgICAgICAgImxpYmJhdHRlcnlzdGF0c19haWRsIiwKZGlmZiAtLWdpdCBhL21lZGlhL3V0aWxzL2Z1enplcnMvQW5kcm9pZC5icCBiL21lZGlhL3V0aWxzL2Z1enplcnMvQW5kcm9pZC5icAppbmRleCBjMTY5OGRjLi5jNGRjMjRmIDEwMDY0NAotLS0gYS9tZWRpYS91dGlscy9mdXp6ZXJzL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvdXRpbHMvZnV6emVycy9BbmRyb2lkLmJwCkBAIC0xOCw2ICsxOCw3IEBACiAgICAgICAgICJsaWJ1dGlscyIsCiAgICAgICAgICJsaWJiaW5kZXIiLAogICAgICAgICAiZnJhbWV3b3JrLXBlcm1pc3Npb24tYWlkbC1jcHAiLAorICAgICAgICAicGFja2FnZW1hbmFnZXJfYWlkbC1jcHAiLAogICAgIF0sCiAKICAgICBjZmxhZ3M6IFsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BbmRyb2lkLmJwIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL0FuZHJvaWQuYnAKaW5kZXggYjkxZjMwMi4uZmVjYzE4MyAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0FuZHJvaWQuYnAKKysrIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL0FuZHJvaWQuYnAKQEAgLTgxLDYgKzgxLDcgQEAKICAgICAgICAgImxpYm1lZGlhX2hlbHBlciIsCiAgICAgICAgICJsaWJzaG1lbWNvbXBhdCIsCiAgICAgICAgICJsaWJ2aWJyYXRvciIsCisgICAgICAgICJwYWNrYWdlbWFuYWdlcl9haWRsLWNwcCIsCiAgICAgXSwKIAogICAgIHN0YXRpY19saWJzOiBbCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvQXVkaW9GbGluZ2VyLmNwcCBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BdWRpb0ZsaW5nZXIuY3BwCmluZGV4IDY3NmJmNzguLmZjMDgzNTAgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BdWRpb0ZsaW5nZXIuY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BdWRpb0ZsaW5nZXIuY3BwCkBAIC05OTgsOCArOTk4LDkgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBzZXRBdWRpb0h3U3luY0ZvclNlc3Npb25fbCh0aHJlYWQsIHNlc3Npb25JZCk7CisgICAgICAgIGlmICgob3V0cHV0LmZsYWdzICYgQVVESU9fT1VUUFVUX0ZMQUdfSFdfQVZfU1lOQykgPT0gQVVESU9fT1VUUFVUX0ZMQUdfSFdfQVZfU1lOQykgeworICAgICAgICAgICAgc2V0QXVkaW9Id1N5bmNGb3JTZXNzaW9uX2wodGhyZWFkLCBzZXNzaW9uSWQpOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGxTdGF0dXMgIT0gTk9fRVJST1IpIHsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL0RldmljZURlc2NyaXB0b3IuY3BwIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvRGV2aWNlRGVzY3JpcHRvci5jcHAKaW5kZXggMTcyMjAzMi4uYzljOGVkZSAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvRGV2aWNlRGVzY3JpcHRvci5jcHAKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvRGV2aWNlRGVzY3JpcHRvci5jcHAKQEAgLTU4LDE1ICs1OCw2IEBACiAgICAgICAgIG1EZWNsYXJlZEFkZHJlc3MoRGV2aWNlRGVzY3JpcHRvckJhc2U6OmFkZHJlc3MoKSkKIHsKICAgICBtQ3VycmVudEVuY29kZWRGb3JtYXQgPSBBVURJT19GT1JNQVRfREVGQVVMVDsKLSAgICAvKiBJZiBmcmFtZXdvcmsgcnVucyBhZ2FpbnN0IGEgcHJlIDUuMCBBdWRpbyBIQUwsIGVuY29kZWQgZm9ybWF0cyBhcmUgYWJzZW50IGZyb20gdGhlIGNvbmZpZy4KLSAgICAgKiBGSVhNRTogQVBNIHNob3VsZCBrbm93IHRoZSB2ZXJzaW9uIG9mIHRoZSBIQUwgYW5kIGRvbid0IGFkZCB0aGUgZm9ybWF0cyBmb3IgVjUuMC4KLSAgICAgKiBGb3Igbm93LCB0aGUgd29ya2Fyb3VuZCB0byByZW1vdmUgQUMzIGFuZCBJRUM2MTkzNyBzdXBwb3J0IG9uIEhETUkgaXMgdG8gZGVjbGFyZQotICAgICAqIHNvbWV0aGluZyBsaWtlICdlbmNvZGVkRm9ybWF0cz0iQVVESU9fRk9STUFUX1BDTV8xNl9CSVQiJyBvbiB0aGUgSERNSSBkZXZpY2VQb3J0LgotICAgICAqLwotICAgIGlmIChtRGV2aWNlVHlwZUFkZHIubVR5cGUgPT0gQVVESU9fREVWSUNFX09VVF9IRE1JICYmIG1FbmNvZGVkRm9ybWF0cy5lbXB0eSgpKSB7Ci0gICAgICAgIG1FbmNvZGVkRm9ybWF0cy5wdXNoX2JhY2soQVVESU9fRk9STUFUX0FDMyk7Ci0gICAgICAgIG1FbmNvZGVkRm9ybWF0cy5wdXNoX2JhY2soQVVESU9fRk9STUFUX0lFQzYxOTM3KTsKLSAgICB9CiB9CiAKIHZvaWQgRGV2aWNlRGVzY3JpcHRvcjo6YXR0YWNoKGNvbnN0IHNwPEh3TW9kdWxlPiYgbW9kdWxlKQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvUG9saWN5QXVkaW9Qb3J0LmNwcCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL1BvbGljeUF1ZGlvUG9ydC5jcHAKaW5kZXggOGM2MWI5MC4uNTk4NjA2OSAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvUG9saWN5QXVkaW9Qb3J0LmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9Qb2xpY3lBdWRpb1BvcnQuY3BwCkBAIC0zMCw5ICszMCw5IEBACiAvLyAtLS0gUG9saWN5QXVkaW9Qb3J0IGNsYXNzIGltcGxlbWVudGF0aW9uCiB2b2lkIFBvbGljeUF1ZGlvUG9ydDo6YXR0YWNoKGNvbnN0IHNwPEh3TW9kdWxlPiYgbW9kdWxlKQogeworICAgIG1Nb2R1bGUgPSBtb2R1bGU7CiAgICAgQUxPR1YoIiVzOiBhdHRhY2hpbmcgbW9kdWxlICVzIHRvIHBvcnQgJXMiLAogICAgICAgICAgICAgX19GVU5DVElPTl9fLCBnZXRNb2R1bGVOYW1lKCksIGFzQXVkaW9Qb3J0KCktPmdldE5hbWUoKS5jX3N0cigpKTsKLSAgICBtTW9kdWxlID0gbW9kdWxlOwogfQogCiB2b2lkIFBvbGljeUF1ZGlvUG9ydDo6ZGV0YWNoKCkKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbmZpZy9ibHVldG9vdGhfYXVkaW9fcG9saWN5X2NvbmZpZ3VyYXRpb24ueG1sIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29uZmlnL2JsdWV0b290aF9hdWRpb19wb2xpY3lfY29uZmlndXJhdGlvbi54bWwKaW5kZXggOTg0MTViNy4uMjJmZjk1NCAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29uZmlnL2JsdWV0b290aF9hdWRpb19wb2xpY3lfY29uZmlndXJhdGlvbi54bWwKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29uZmlnL2JsdWV0b290aF9hdWRpb19wb2xpY3lfY29uZmlndXJhdGlvbi54bWwKQEAgLTIyLDYgKzIyLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICBzYW1wbGluZ1JhdGVzPSI4MDAwLDE2MDAwLDI0MDAwLDMyMDAwLDQ0MTAwLDQ4MDAwIgogICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbE1hc2tzPSJBVURJT19DSEFOTkVMX09VVF9NT05PLEFVRElPX0NIQU5ORUxfT1VUX1NURVJFTyIvPgogICAgICAgICA8L21peFBvcnQ+CisgICAgICAgIDxtaXhQb3J0IG5hbWU9ImxlIGF1ZGlvIGlucHV0IiByb2xlPSJzaW5rIj4KKyAgICAgICAgICAgIDxwcm9maWxlIG5hbWU9IiIgZm9ybWF0PSJBVURJT19GT1JNQVRfUENNXzE2X0JJVCIKKyAgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nUmF0ZXM9IjgwMDAsMTYwMDAsMjQwMDAsMzIwMDAsNDQxMDAsNDgwMDAiCisgICAgICAgICAgICAgICAgICAgICBjaGFubmVsTWFza3M9IkFVRElPX0NIQU5ORUxfSU5fTU9OTyxBVURJT19DSEFOTkVMX0lOX1NURVJFTyIvPgorICAgICAgICAgICAgPHByb2ZpbGUgbmFtZT0iIiBmb3JtYXQ9IkFVRElPX0ZPUk1BVF9QQ01fMjRfQklUX1BBQ0tFRCIKKyAgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nUmF0ZXM9IjgwMDAsMTYwMDAsMjQwMDAsMzIwMDAsNDQxMDAsNDgwMDAiCisgICAgICAgICAgICAgICAgICAgICBjaGFubmVsTWFza3M9IkFVRElPX0NIQU5ORUxfSU5fTU9OTyxBVURJT19DSEFOTkVMX0lOX1NURVJFTyIvPgorICAgICAgICAgICAgPHByb2ZpbGUgbmFtZT0iIiBmb3JtYXQ9IkFVRElPX0ZPUk1BVF9QQ01fMzJfQklUIgorICAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmdSYXRlcz0iODAwMCwxNjAwMCwyNDAwMCwzMjAwMCw0NDEwMCw0ODAwMCIKKyAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxNYXNrcz0iQVVESU9fQ0hBTk5FTF9JTl9NT05PLEFVRElPX0NIQU5ORUxfSU5fU1RFUkVPIi8+CisgICAgICAgIDwvbWl4UG9ydD4KICAgICA8L21peFBvcnRzPgogICAgIDxkZXZpY2VQb3J0cz4KICAgICAgICAgPCEtLSBBMkRQIEF1ZGlvIFBvcnRzIC0tPgpAQCAtNDksNiArNjAsNyBAQAogICAgICAgICAtLT4KICAgICAgICAgPGRldmljZVBvcnQgdGFnTmFtZT0iQkxFIEhlYWRzZXQgT3V0IiB0eXBlPSJBVURJT19ERVZJQ0VfT1VUX0JMRV9IRUFEU0VUIiByb2xlPSJzaW5rIi8+CiAgICAgICAgIDxkZXZpY2VQb3J0IHRhZ05hbWU9IkJMRSBTcGVha2VyIE91dCIgdHlwZT0iQVVESU9fREVWSUNFX09VVF9CTEVfU1BFQUtFUiIgcm9sZT0ic2luayIvPgorICAgICAgICA8ZGV2aWNlUG9ydCB0YWdOYW1lPSJCTEUgSGVhZHNldCBJbiIgdHlwZT0iQVVESU9fREVWSUNFX0lOX0JMRV9IRUFEU0VUIiByb2xlPSJzb3VyY2UiLz4KICAgICA8L2RldmljZVBvcnRzPgogICAgIDxyb3V0ZXM+CiAgICAgICAgIDxyb3V0ZSB0eXBlPSJtaXgiIHNpbms9IkJUIEEyRFAgT3V0IgpAQCAtNjEsNiArNzMsOCBAQAogICAgICAgICAgICAgICAgc291cmNlcz0iaGVhcmluZyBhaWQgb3V0cHV0Ii8+CiAgICAgICAgIDxyb3V0ZSB0eXBlPSJtaXgiIHNpbms9IkJMRSBIZWFkc2V0IE91dCIKICAgICAgICAgICAgICAgIHNvdXJjZXM9ImxlIGF1ZGlvIG91dHB1dCIvPgorICAgICAgICA8cm91dGUgdHlwZT0ibWl4IiBzaW5rPSJsZSBhdWRpbyBpbnB1dCIKKyAgICAgICAgICAgICAgIHNvdXJjZXM9IkJMRSBIZWFkc2V0IEluIi8+CiAgICAgICAgIDxyb3V0ZSB0eXBlPSJtaXgiIHNpbms9IkJMRSBTcGVha2VyIE91dCIKICAgICAgICAgICAgICAgIHNvdXJjZXM9ImxlIGF1ZGlvIG91dHB1dCIvPgogICAgIDwvcm91dGVzPgpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29uZmlnL2JsdWV0b290aF9hdWRpb19wb2xpY3lfY29uZmlndXJhdGlvbl83XzAueG1sIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29uZmlnL2JsdWV0b290aF9hdWRpb19wb2xpY3lfY29uZmlndXJhdGlvbl83XzAueG1sCmluZGV4IGZiZTc1NzEuLmFhZDAwZDYgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbmZpZy9ibHVldG9vdGhfYXVkaW9fcG9saWN5X2NvbmZpZ3VyYXRpb25fN18wLnhtbAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb25maWcvYmx1ZXRvb3RoX2F1ZGlvX3BvbGljeV9jb25maWd1cmF0aW9uXzdfMC54bWwKQEAgLTIyLDYgKzIyLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICBzYW1wbGluZ1JhdGVzPSI4MDAwIDE2MDAwIDI0MDAwIDMyMDAwIDQ0MTAwIDQ4MDAwIgogICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbE1hc2tzPSJBVURJT19DSEFOTkVMX09VVF9NT05PIEFVRElPX0NIQU5ORUxfT1VUX1NURVJFTyIvPgogICAgICAgICA8L21peFBvcnQ+CisgICAgICAgIDxtaXhQb3J0IG5hbWU9ImxlIGF1ZGlvIGlucHV0IiByb2xlPSJzaW5rIj4KKyAgICAgICAgICAgIDxwcm9maWxlIG5hbWU9IiIgZm9ybWF0PSJBVURJT19GT1JNQVRfUENNXzE2X0JJVCIKKyAgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nUmF0ZXM9IjgwMDAgMTYwMDAgMjQwMDAgMzIwMDAgNDQxMDAgNDgwMDAiCisgICAgICAgICAgICAgICAgICAgICBjaGFubmVsTWFza3M9IkFVRElPX0NIQU5ORUxfSU5fTU9OTyBBVURJT19DSEFOTkVMX0lOX1NURVJFTyIvPgorICAgICAgICAgICAgPHByb2ZpbGUgbmFtZT0iIiBmb3JtYXQ9IkFVRElPX0ZPUk1BVF9QQ01fMjRfQklUX1BBQ0tFRCIKKyAgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nUmF0ZXM9IjgwMDAgMTYwMDAgMjQwMDAgMzIwMDAgNDQxMDAgNDgwMDAiCisgICAgICAgICAgICAgICAgICAgICBjaGFubmVsTWFza3M9IkFVRElPX0NIQU5ORUxfSU5fTU9OTyBBVURJT19DSEFOTkVMX0lOX1NURVJFTyIvPgorICAgICAgICAgICAgPHByb2ZpbGUgbmFtZT0iIiBmb3JtYXQ9IkFVRElPX0ZPUk1BVF9QQ01fMzJfQklUIgorICAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmdSYXRlcz0iODAwMCAxNjAwMCAyNDAwMCAzMjAwMCA0NDEwMCA0ODAwMCIKKyAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxNYXNrcz0iQVVESU9fQ0hBTk5FTF9JTl9NT05PIEFVRElPX0NIQU5ORUxfSU5fU1RFUkVPIi8+CisgICAgICAgIDwvbWl4UG9ydD4KICAgICA8L21peFBvcnRzPgogICAgIDxkZXZpY2VQb3J0cz4KICAgICAgICAgPCEtLSBBMkRQIEF1ZGlvIFBvcnRzIC0tPgpAQCAtNDUsNiArNTYsNyBAQAogICAgICAgICA8IS0tIEJMRSBBdWRpbyBQb3J0cyAtLT4KICAgICAgICAgPGRldmljZVBvcnQgdGFnTmFtZT0iQkxFIEhlYWRzZXQgT3V0IiB0eXBlPSJBVURJT19ERVZJQ0VfT1VUX0JMRV9IRUFEU0VUIiByb2xlPSJzaW5rIi8+CiAgICAgICAgIDxkZXZpY2VQb3J0IHRhZ05hbWU9IkJMRSBTcGVha2VyIE91dCIgdHlwZT0iQVVESU9fREVWSUNFX09VVF9CTEVfU1BFQUtFUiIgcm9sZT0ic2luayIvPgorICAgICAgICA8ZGV2aWNlUG9ydCB0YWdOYW1lPSJCTEUgSGVhZHNldCBJbiIgdHlwZT0iQVVESU9fREVWSUNFX0lOX0JMRV9IRUFEU0VUIiByb2xlPSJzb3VyY2UiLz4KICAgICA8L2RldmljZVBvcnRzPgogICAgIDxyb3V0ZXM+CiAgICAgICAgIDxyb3V0ZSB0eXBlPSJtaXgiIHNpbms9IkJUIEEyRFAgT3V0IgpAQCAtNTcsNiArNjksOCBAQAogICAgICAgICAgICAgICAgc291cmNlcz0iaGVhcmluZyBhaWQgb3V0cHV0Ii8+CiAgICAgICAgIDxyb3V0ZSB0eXBlPSJtaXgiIHNpbms9IkJMRSBIZWFkc2V0IE91dCIKICAgICAgICAgICAgICAgIHNvdXJjZXM9ImxlIGF1ZGlvIG91dHB1dCIvPgorICAgICAgICA8cm91dGUgdHlwZT0ibWl4IiBzaW5rPSJsZSBhdWRpbyBpbnB1dCIKKyAgICAgICAgICAgICAgIHNvdXJjZXM9IkJMRSBIZWFkc2V0IEluIi8+CiAgICAgICAgIDxyb3V0ZSB0eXBlPSJtaXgiIHNpbms9IkJMRSBTcGVha2VyIE91dCIKICAgICAgICAgICAgICAgIHNvdXJjZXM9ImxlIGF1ZGlvIG91dHB1dCIvPgogICAgIDwvcm91dGVzPgpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29uZmlnL2xlX2F1ZGlvX3BvbGljeV9jb25maWd1cmF0aW9uLnhtbCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbmZpZy9sZV9hdWRpb19wb2xpY3lfY29uZmlndXJhdGlvbi54bWwKaW5kZXggYTNkYzcyYi4uZGNkZDgwNSAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29uZmlnL2xlX2F1ZGlvX3BvbGljeV9jb25maWd1cmF0aW9uLnhtbAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb25maWcvbGVfYXVkaW9fcG9saWN5X2NvbmZpZ3VyYXRpb24ueG1sCkBAIC03LDEzICs3LDIwIEBACiAgICAgICAgICAgICAgICAgICAgICBzYW1wbGluZ1JhdGVzPSI4MDAwLDE2MDAwLDI0MDAwLDMyMDAwLDQ0MTAwLDQ4MDAwIgogICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbE1hc2tzPSJBVURJT19DSEFOTkVMX09VVF9NT05PLEFVRElPX0NIQU5ORUxfT1VUX1NURVJFTyIvPgogICAgICAgICA8L21peFBvcnQ+CisgICAgICAgIDxtaXhQb3J0IG5hbWU9ImxlIGF1ZGlvIGlucHV0IiByb2xlPSJzaW5rIj4KKyAgICAgICAgICAgIDxwcm9maWxlIG5hbWU9IiIgZm9ybWF0PSJBVURJT19GT1JNQVRfUENNXzE2X0JJVCxBVURJT19GT1JNQVRfUENNXzI0X0JJVCxBVURJT19GT1JNQVRfUENNXzMyX0JJVCIKKyAgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nUmF0ZXM9IjgwMDAsMTYwMDAsMjQwMDAsMzIwMDAsNDQxMDAsNDgwMDAiCisgICAgICAgICAgICAgICAgICAgICBjaGFubmVsTWFza3M9IkFVRElPX0NIQU5ORUxfSU5fTU9OTyxBVURJT19DSEFOTkVMX0lOX1NURVJFTyIvPgorICAgICAgICA8L21peFBvcnQ+CiAgICAgPC9taXhQb3J0cz4KICAgICA8ZGV2aWNlUG9ydHM+CiAgICAgICAgIDxkZXZpY2VQb3J0IHRhZ05hbWU9IkJMRSBIZWFkc2V0IE91dCIgdHlwZT0iQVVESU9fREVWSUNFX09VVF9CTEVfSEVBRFNFVCIgcm9sZT0ic2luayIvPgogICAgICAgICA8ZGV2aWNlUG9ydCB0YWdOYW1lPSJCTEUgU3BlYWtlciBPdXQiIHR5cGU9IkFVRElPX0RFVklDRV9PVVRfQkxFX1NQRUFLRVIiIHJvbGU9InNpbmsiLz4KKyAgICAgICAgPGRldmljZVBvcnQgdGFnTmFtZT0iQkxFIEhlYWRzZXQgSW4iIHR5cGU9IkFVRElPX0RFVklDRV9JTl9CTEVfSEVBRFNFVCIgcm9sZT0ic291cmNlIi8+CiAgICAgPC9kZXZpY2VQb3J0cz4KICAgICA8cm91dGVzPgogICAgICAgICA8cm91dGUgdHlwZT0ibWl4IiBzaW5rPSJCTEUgSGVhZHNldCBPdXQiIHNvdXJjZXM9ImxlIGF1ZGlvIG91dHB1dCIvPgogICAgICAgICA8cm91dGUgdHlwZT0ibWl4IiBzaW5rPSJCTEUgU3BlYWtlciBPdXQiIHNvdXJjZXM9ImxlIGF1ZGlvIG91dHB1dCIvPgorICAgICAgICA8cm91dGUgdHlwZT0ibWl4IiBzaW5rPSJsZSBhdWRpbyBpbnB1dCIgc291cmNlcz0iQkxFIEhlYWRzZXQgSW4iLz4KICAgICA8L3JvdXRlcz4KIDwvbW9kdWxlPgpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvc2VydmljZS9BbmRyb2lkLmJwIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvc2VydmljZS9BbmRyb2lkLmJwCmluZGV4IDE5N2YxODMuLmYzZDRmMmYgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3NlcnZpY2UvQW5kcm9pZC5icAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9zZXJ2aWNlL0FuZHJvaWQuYnAKQEAgLTU1LDYgKzU1LDcgQEAKICAgICAgICAgImF1ZGlvcG9saWN5LXR5cGVzLWFpZGwtY3BwIiwKICAgICAgICAgImNhcHR1cmVfc3RhdGVfbGlzdGVuZXItYWlkbC1jcHAiLAogICAgICAgICAiZnJhbWV3b3JrLXBlcm1pc3Npb24tYWlkbC1jcHAiLAorICAgICAgICAicGFja2FnZW1hbmFnZXJfYWlkbC1jcHAiLAogICAgICAgICAic3BhdGlhbGl6ZXItYWlkbC1jcHAiLAogICAgIF0sCiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3Rlc3RzL2F1ZGlvcG9saWN5bWFuYWdlcl90ZXN0cy5jcHAgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS90ZXN0cy9hdWRpb3BvbGljeW1hbmFnZXJfdGVzdHMuY3BwCmluZGV4IGExNmFiN2QuLjlkMmQyYjMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3Rlc3RzL2F1ZGlvcG9saWN5bWFuYWdlcl90ZXN0cy5jcHAKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvdGVzdHMvYXVkaW9wb2xpY3ltYW5hZ2VyX3Rlc3RzLmNwcApAQCAtMTM3NSw3ICsxMzc1LDggQEAKICAgICBpZiAodHlwZSA9PSBBVURJT19ERVZJQ0VfT1VUX0hETUkpIHsKICAgICAgICAgLy8gU2V0IGRldmljZSBjb25uZWN0aW9uIHN0YXRlIGZhaWxlZCBkdWUgdG8gbm8gZGV2aWNlIGRlc2NyaXB0b3IgZm91bmQKICAgICAgICAgLy8gRm9yIEhETUkgY2FzZSwgaXQgaXMgZWFzaWVyIHRvIHNpbXVsYXRlIGRldmljZSBkZXNjcmlwdG9yIG5vdCBmb3VuZCBlcnJvcgotICAgICAgICAvLyBieSB1c2luZyBhIHVuZGVjbGFyZWQgZW5jb2RlZCBmb3JtYXQuCisgICAgICAgIC8vIGJ5IHVzaW5nIGFuIGVuY29kZWQgZm9ybWF0IHdoaWNoIGlzbid0IGxpc3RlZCBpbiB0aGUgJ2VuY29kZWRGb3JtYXRzJworICAgICAgICAvLyBhdHRyaWJ1dGUgZm9yIHRoaXMgZGV2aWNlUG9ydC4KICAgICAgICAgQVNTRVJUX0VRKElOVkFMSURfT1BFUkFUSU9OLCBtTWFuYWdlci0+c2V0RGV2aWNlQ29ubmVjdGlvblN0YXRlKAogICAgICAgICAgICAgICAgIHR5cGUsIEFVRElPX1BPTElDWV9ERVZJQ0VfU1RBVEVfQVZBSUxBQkxFLAogICAgICAgICAgICAgICAgIGFkZHJlc3MuY19zdHIoKSwgbmFtZS5jX3N0cigpLCBBVURJT19GT1JNQVRfTUFUXzJfMSkpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvdGVzdHMvcmVzb3VyY2VzL3Rlc3RfYXVkaW9fcG9saWN5X2NvbmZpZ3VyYXRpb24ueG1sIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvdGVzdHMvcmVzb3VyY2VzL3Rlc3RfYXVkaW9fcG9saWN5X2NvbmZpZ3VyYXRpb24ueG1sCmluZGV4IDg3ZjBhYjkuLjQxZWQ3MGMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3Rlc3RzL3Jlc291cmNlcy90ZXN0X2F1ZGlvX3BvbGljeV9jb25maWd1cmF0aW9uLnhtbAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS90ZXN0cy9yZXNvdXJjZXMvdGVzdF9hdWRpb19wb2xpY3lfY29uZmlndXJhdGlvbi54bWwKQEAgLTUwLDcgKzUwLDggQEAKICAgICAgICAgICAgICAgICA8L2RldmljZVBvcnQ+CiAgICAgICAgICAgICAgICAgPGRldmljZVBvcnQgdGFnTmFtZT0iQnVpbHQtSW4gTWljIiB0eXBlPSJBVURJT19ERVZJQ0VfSU5fQlVJTFRJTl9NSUMiIHJvbGU9InNvdXJjZSI+CiAgICAgICAgICAgICAgICAgPC9kZXZpY2VQb3J0PgotICAgICAgICAgICAgICAgIDxkZXZpY2VQb3J0IHRhZ05hbWU9IkhkbWkiIHR5cGU9IkFVRElPX0RFVklDRV9PVVRfSERNSSIgcm9sZT0ic2luayI+CisgICAgICAgICAgICAgICAgPGRldmljZVBvcnQgdGFnTmFtZT0iSGRtaSIgdHlwZT0iQVVESU9fREVWSUNFX09VVF9IRE1JIiByb2xlPSJzaW5rIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZWRGb3JtYXRzPSJBVURJT19GT1JNQVRfQUMzIj4KICAgICAgICAgICAgICAgICA8L2RldmljZVBvcnQ+CiAgICAgICAgICAgICAgICAgPGRldmljZVBvcnQgdGFnTmFtZT0iSGRtaS1JbiBNaWMiIHR5cGU9IkFVRElPX0RFVklDRV9JTl9IRE1JIiByb2xlPSJzb3VyY2UiPgogICAgICAgICAgICAgICAgIDwvZGV2aWNlUG9ydD4KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL21lZGlhY29kZWMvcmVnaXN0cmFudC9BbmRyb2lkLmJwIGIvc2VydmljZXMvbWVkaWFjb2RlYy9yZWdpc3RyYW50L0FuZHJvaWQuYnAKaW5kZXggNjk2Yjk2Ny4uZDEwZTMzOSAxMDA2NDQKLS0tIGEvc2VydmljZXMvbWVkaWFjb2RlYy9yZWdpc3RyYW50L0FuZHJvaWQuYnAKKysrIGIvc2VydmljZXMvbWVkaWFjb2RlYy9yZWdpc3RyYW50L0FuZHJvaWQuYnAKQEAgLTcsNyArNyw3IEBACiAgICAgZGVmYXVsdF9hcHBsaWNhYmxlX2xpY2Vuc2VzOiBbImZyYW1ld29ya3NfYXZfc2VydmljZXNfbWVkaWFjb2RlY19saWNlbnNlIl0sCiB9CiAKLWNjX2xpYnJhcnlfc2hhcmVkIHsKK2NjX2xpYnJhcnkgewogICAgIG5hbWU6ICJsaWJtZWRpYV9jb2RlY3NlcnZpY2VyZWdpc3RyYW50IiwKICAgICB2ZW5kb3JfYXZhaWxhYmxlOiB0cnVlLAogICAgIHNyY3M6IFsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL21lZGlhY29kZWMvcmVnaXN0cmFudC9mdXp6ZXIvQW5kcm9pZC5icCBiL3NlcnZpY2VzL21lZGlhY29kZWMvcmVnaXN0cmFudC9mdXp6ZXIvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2FmYmYxCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvbWVkaWFjb2RlYy9yZWdpc3RyYW50L2Z1enplci9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgeworICAgIC8vIFNlZTogaHR0cDovL2dvL2FuZHJvaWQtbGljZW5zZS1mYXEKKyAgICAvLyBBIGxhcmdlLXNjYWxlLWNoYW5nZSBhZGRlZCAnZGVmYXVsdF9hcHBsaWNhYmxlX2xpY2Vuc2VzJyB0byBpbXBvcnQKKyAgICAvLyBhbGwgb2YgdGhlICdsaWNlbnNlX2tpbmRzJyBmcm9tICJmcmFtZXdvcmtzX2F2X3NlcnZpY2VzX21lZGlhY29kZWNfbGljZW5zZSIKKyAgICAvLyB0byBnZXQgdGhlIGJlbG93IGxpY2Vuc2Uga2luZHM6CisgICAgLy8gICBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCisgICAgZGVmYXVsdF9hcHBsaWNhYmxlX2xpY2Vuc2VzOiBbImZyYW1ld29ya3NfYXZfc2VydmljZXNfbWVkaWFjb2RlY19saWNlbnNlIl0sCit9CisKK2NjX2Z1enogeworICAgIG5hbWU6ICJjb2RlY1NlcnZpY2VSZWdpc3RyYW50X2Z1enplciIsCisgICAgc3JjczogWworICAgICAgICAiY29kZWNTZXJ2aWNlUmVnaXN0cmFudF9mdXp6ZXIuY3BwIiwKKyAgICBdLAorICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJsaWJtZWRpYV9jb2RlY3NlcnZpY2VyZWdpc3RyYW50IiwKKyAgICBdLAorICAgIGhlYWRlcl9saWJzOiBbCisgICAgICAgICJsaWJtZWRpYV9oZWFkZXJzIiwKKyAgICBdLAorICAgIGRlZmF1bHRzOiBbCisgICAgICAgICJsaWJjb2RlYzItaGlkbC1kZWZhdWx0cyIsCisgICAgXSwKKyAgICBmdXp6X2NvbmZpZzogeworICAgICAgICBjYzogWworICAgICAgICAgICAgImFuZHJvaWQtbWVkaWEtZnV6emluZy1yZXBvcnRzQGdvb2dsZS5jb20iLAorICAgICAgICBdLAorICAgICAgICBjb21wb25lbnRpZDogMTU1Mjc2LAorICAgIH0sCit9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYWNvZGVjL3JlZ2lzdHJhbnQvZnV6emVyL1JFQURNRS5tZCBiL3NlcnZpY2VzL21lZGlhY29kZWMvcmVnaXN0cmFudC9mdXp6ZXIvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZmEwNjMKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9tZWRpYWNvZGVjL3JlZ2lzdHJhbnQvZnV6emVyL1JFQURNRS5tZApAQCAtMCwwICsxLDU2IEBACisjIEZ1enplciBmb3IgbGlibWVkaWFfY29kZWNzZXJ2aWNlcmVnaXN0cmFudAorCisjIyBQbHVnaW4gRGVzaWduIENvbnNpZGVyYXRpb25zCitUaGUgZnV6emVyIHBsdWdpbiBmb3IgbGlibWVkaWFfY29kZWNzZXJ2aWNlcmVnaXN0cmFudCBpcyBkZXNpZ25lZCBiYXNlZCBvbiB0aGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGlicmFyeSBhbmQgdHJpZXMgdG8gYWNoaWV2ZSB0aGUgZm9sbG93aW5nOgorCisjIyMjIyBNYXhpbWl6ZSBjb2RlIGNvdmVyYWdlCitUaGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFyZSBub3QgaGFyZGNvZGVkLCBidXQgaW5zdGVhZCBzZWxlY3RlZCBiYXNlZCBvbgoraW5jb21pbmcgZGF0YS4gVGhpcyBlbnN1cmVzIG1vcmUgY29kZSBwYXRocyBhcmUgcmVhY2hlZCBieSB0aGUgZnV6emVyLgorCitsaWJtZWRpYV9jb2RlY3NlcnZpY2VyZWdpc3RyYW50IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKzEuIEMyU3RyaW5nIChwYXJhbWV0ZXIgbmFtZTogYGMyU3RyaW5nYCkKKzIuIFdpZHRoIChwYXJhbWV0ZXIgbmFtZTogYHdpZHRoYCkKKzMuIEhlaWdodCAocGFyYW1ldGVyIG5hbWU6IGBoZWlnaHRgKQorNC4gU2FtcGxpbmdSYXRlIChwYXJhbWV0ZXIgbmFtZTogYHNhbXBsaW5nUmF0ZWApCis1LiBDaGFubmVscyAocGFyYW1ldGVyIG5hbWU6IGBjaGFubmVsc2ApCis2LiBTdHJlYW0gKHBhcmFtZXRlciBuYW1lOiBgc3RyZWFtYCkKKworfCBQYXJhbWV0ZXJ8IFZhbGlkIFZhbHVlc3wgQ29uZmlndXJlZCBWYWx1ZXwKK3wtLS0tLS0tLS0tLS0tIHwtLS0tLS0tLS0tLS0tfCAtLS0tLSB8Cit8IGBjMlN0cmluZ2AgfGBTdHJpbmdgIHwgVmFsdWUgb2J0YWluZWQgZnJvbSBGdXp6ZWREYXRhUHJvdmlkZXJ8Cit8IGB3aWR0aGAgfGBVSU5UMzJfTUlOYCB0byBgVUlOVDMyX01BWGAgfCBWYWx1ZSBvYnRhaW5lZCBmcm9tIEZ1enplZERhdGFQcm92aWRlcnwKK3wgYGhlaWdodGAgfGBVSU5UMzJfTUlOYCB0byBgVUlOVDMyX01BWGAgfCBWYWx1ZSBvYnRhaW5lZCBmcm9tIEZ1enplZERhdGFQcm92aWRlcnwKK3wgYHNhbXBsaW5nUmF0ZWAgfGBVSU5UMzJfTUlOYCB0byBgVUlOVDMyX01BWGAgfCBWYWx1ZSBvYnRhaW5lZCBmcm9tIEZ1enplZERhdGFQcm92aWRlcnwKK3wgYGNoYW5uZWxzYCB8YFVJTlQzMl9NSU5gIHRvIGBVSU5UMzJfTUFYYCB8IFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorfCBgc3RyZWFtYCB8YFVJTlQzMl9NSU5gIHRvIGBVSU5UMzJfTUFYYCB8IFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorCitUaGlzIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBwbHVnaW4gaXMgYWx3YXlzIGRldGVybWluaXN0aWMgZm9yIGFueSBnaXZlbiBpbnB1dC4KKworIyMjIyMgTWF4aW1pemUgdXRpbGl6YXRpb24gb2YgaW5wdXQgZGF0YQorVGhlIHBsdWdpbiBmZWVkcyB0aGUgZW50aXJlIGlucHV0IGRhdGEgdG8gdGhlIGxpYm1lZGlhX2NvZGVjc2VydmljZXJlZ2lzdHJhbnQgbW9kdWxlLgorVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHBsdWdpbiB0b2xlcmF0ZXMgYW55IGtpbmQgb2YgaW5wdXQgKGVtcHR5LCBodWdlLAorbWFsZm9ybWVkLCBldGMpIGFuZCBkb2VzbnQgYGV4aXQoKWAgb24gYW55IGlucHV0IGFuZCB0aGVyZWJ5IGluY3JlYXNpbmcgdGhlCitjaGFuY2Ugb2YgaWRlbnRpZnlpbmcgdnVsbmVyYWJpbGl0aWVzLgorCisjIyBCdWlsZAorCitUaGlzIGRlc2NyaWJlcyBzdGVwcyB0byBidWlsZCBjb2RlY1NlcnZpY2VSZWdpc3RyYW50X2Z1enplciBiaW5hcnkuCisKKyMjIyBBbmRyb2lkCisKKyMjIyMgU3RlcHMgdG8gYnVpbGQKK0J1aWxkIHRoZSBmdXp6ZXIKK2BgYAorICAkIG1tIC1qJChucHJvYykgY29kZWNTZXJ2aWNlUmVnaXN0cmFudF9mdXp6ZXIKK2BgYAorIyMjIyBTdGVwcyB0byBydW4KKworVG8gcnVuIG9uIGRldmljZQorYGBgCisgICQgYWRiIHN5bmMgZGF0YQorICAkIGFkYiBzaGVsbCAvZGF0YS9mdXp6LyR7VEFSR0VUX0FSQ0h9L2NvZGVjU2VydmljZVJlZ2lzdHJhbnRfZnV6emVyL2NvZGVjU2VydmljZVJlZ2lzdHJhbnRfZnV6emVyCitgYGAKKworIyMgUmVmZXJlbmNlczoKKyAqIGh0dHA6Ly9sbHZtLm9yZy9kb2NzL0xpYkZ1enplci5odG1sCisgKiBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL29zcy1mdXp6CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYWNvZGVjL3JlZ2lzdHJhbnQvZnV6emVyL2NvZGVjU2VydmljZVJlZ2lzdHJhbnRfZnV6emVyLmNwcCBiL3NlcnZpY2VzL21lZGlhY29kZWMvcmVnaXN0cmFudC9mdXp6ZXIvY29kZWNTZXJ2aWNlUmVnaXN0cmFudF9mdXp6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1OTgzZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9tZWRpYWNvZGVjL3JlZ2lzdHJhbnQvZnV6emVyL2NvZGVjU2VydmljZVJlZ2lzdHJhbnRfZnV6emVyLmNwcApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSAiLi4vQ29kZWNTZXJ2aWNlUmVnaXN0cmFudC5jcHAiCisjaW5jbHVkZSAiZnV6emVyL0Z1enplZERhdGFQcm92aWRlci5oIgorI2luY2x1ZGUgPEMyQ29uZmlnLmg+CisjaW5jbHVkZSA8QzJQYXJhbS5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitjb25zdGV4cHIgY2hhciBrU2VydmljZU5hbWVbXSA9ICJzb2Z0d2FyZSI7CisKK2NsYXNzIENvZGVjU2VydmljZVJlZ2lzdHJhbnRGdXp6ZXIgeworcHVibGljOgorICB2b2lkIHByb2Nlc3MoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUpOworICB+Q29kZWNTZXJ2aWNlUmVnaXN0cmFudEZ1enplcigpIHsKKyAgICBkZWxldGUgbUgyQzI7CisgICAgaWYgKG1JbnB1dFNpemUpIHsKKyAgICAgIGRlbGV0ZSBtSW5wdXRTaXplOworICAgIH0KKyAgICBpZiAobVNhbXBsZVJhdGVJbmZvKSB7CisgICAgICBkZWxldGUgbVNhbXBsZVJhdGVJbmZvOworICAgIH0KKyAgICBpZiAobUNoYW5uZWxDb3VudEluZm8pIHsKKyAgICAgIGRlbGV0ZSBtQ2hhbm5lbENvdW50SW5mbzsKKyAgICB9CisgIH0KKworcHJpdmF0ZToKKyAgdm9pZCBpbml0SDJDMkNvbXBvbmVudFN0b3JlKCk7CisgIHZvaWQgaW52b2tlSDJDMkNvbXBvbmVudFN0b3JlKCk7CisgIHZvaWQgaW52b2tlQ29uZmlnU00oKTsKKyAgdm9pZCBpbnZva2VRdWVyeVNNKCk7CisgIEgyQzJDb21wb25lbnRTdG9yZSAqbUgyQzIgPSBudWxscHRyOworICBDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6aW5wdXQgKm1JbnB1dFNpemUgPSBudWxscHRyOworICBDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOjpvdXRwdXQgKm1TYW1wbGVSYXRlSW5mbyA9IG51bGxwdHI7CisgIEMyU3RyZWFtQ2hhbm5lbENvdW50SW5mbzo6b3V0cHV0ICptQ2hhbm5lbENvdW50SW5mbyA9IG51bGxwdHI7CisgIEMyUGFyYW06OkluZGV4IG1JbmRleCA9IEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6b3V0cHV0OjpQQVJBTV9UWVBFOworICBDMlN0cmVhbUZyYW1lUmF0ZUluZm86Om91dHB1dCBtRnJhbWVSYXRlOworICBGdXp6ZWREYXRhUHJvdmlkZXIgKm1GRFAgPSBudWxscHRyOworfTsKKwordm9pZCBDb2RlY1NlcnZpY2VSZWdpc3RyYW50RnV6emVyOjppbml0SDJDMkNvbXBvbmVudFN0b3JlKCkgeworICB1c2luZyBuYW1lc3BhY2UgOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmMyOworICBzaGFyZWRfcHRyPEMyQ29tcG9uZW50U3RvcmU+IHN0b3JlID0KKyAgICAgIGFuZHJvaWQ6OkdldENvZGVjMlBsYXRmb3JtQ29tcG9uZW50U3RvcmUoKTsKKyAgaWYgKCFzdG9yZSkgeworICAgIHJldHVybjsKKyAgfQorICBhbmRyb2lkOjpzcDxWMV8xOjpJQ29tcG9uZW50U3RvcmU+IHN0b3JlVjFfMSA9CisgICAgICBuZXcgVjFfMTo6dXRpbHM6OkNvbXBvbmVudFN0b3JlKHN0b3JlKTsKKyAgaWYgKHN0b3JlVjFfMS0+cmVnaXN0ZXJBc1NlcnZpY2Uoc3RyaW5nKGtTZXJ2aWNlTmFtZSkpICE9IGFuZHJvaWQ6Ok9LKSB7CisgICAgcmV0dXJuOworICB9CisgIHN0cmluZyBjb25zdCBwcmVmZXJyZWRTdG9yZU5hbWUgPSBzdHJpbmcoa1NlcnZpY2VOYW1lKTsKKyAgc3A8SUNvbXBvbmVudFN0b3JlPiBwcmVmZXJyZWRTdG9yZSA9CisgICAgICBJQ29tcG9uZW50U3RvcmU6OmdldFNlcnZpY2UocHJlZmVycmVkU3RvcmVOYW1lLmNfc3RyKCkpOworICBtSDJDMiA9IG5ldyBIMkMyQ29tcG9uZW50U3RvcmUocHJlZmVycmVkU3RvcmUpOworfQorCit2b2lkIENvZGVjU2VydmljZVJlZ2lzdHJhbnRGdXp6ZXI6Omludm9rZUNvbmZpZ1NNKCkgeworICB2ZWN0b3I8QzJQYXJhbSAqPiBjb25maWdQYXJhbXM7CisgIHVpbnQzMl90IHdpZHRoID0gbUZEUC0+Q29uc3VtZUludGVncmFsPHVpbnQzMl90PigpOworICB1aW50MzJfdCBoZWlnaHQgPSBtRkRQLT5Db25zdW1lSW50ZWdyYWw8dWludDMyX3Q+KCk7CisgIHVpbnQzMl90IHNhbXBsaW5nUmF0ZSA9IG1GRFAtPkNvbnN1bWVJbnRlZ3JhbDx1aW50MzJfdD4oKTsKKyAgdWludDMyX3QgY2hhbm5lbHMgPSBtRkRQLT5Db25zdW1lSW50ZWdyYWw8dWludDMyX3Q+KCk7CisgIGlmIChtRkRQLT5Db25zdW1lQm9vbCgpKSB7CisgICAgbUlucHV0U2l6ZSA9IG5ldyBDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6aW5wdXQoMHUsIHdpZHRoLCBoZWlnaHQpOworICAgIGNvbmZpZ1BhcmFtcy5wdXNoX2JhY2sobUlucHV0U2l6ZSk7CisgIH0gZWxzZSB7CisgICAgaWYgKG1GRFAtPkNvbnN1bWVCb29sKCkpIHsKKyAgICAgIG1TYW1wbGVSYXRlSW5mbyA9IG5ldyBDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOjpvdXRwdXQoMHUsIHNhbXBsaW5nUmF0ZSk7CisgICAgICBjb25maWdQYXJhbXMucHVzaF9iYWNrKG1TYW1wbGVSYXRlSW5mbyk7CisgICAgfQorICAgIGlmIChtRkRQLT5Db25zdW1lQm9vbCgpKSB7CisgICAgICBtQ2hhbm5lbENvdW50SW5mbyA9IG5ldyBDMlN0cmVhbUNoYW5uZWxDb3VudEluZm86Om91dHB1dCgwdSwgY2hhbm5lbHMpOworICAgICAgY29uZmlnUGFyYW1zLnB1c2hfYmFjayhtQ2hhbm5lbENvdW50SW5mbyk7CisgICAgfQorICB9CisgIHZlY3Rvcjx1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+IGZhaWx1cmVzOworICBtSDJDMi0+Y29uZmlnX3NtKGNvbmZpZ1BhcmFtcywgJmZhaWx1cmVzKTsKK30KKwordm9pZCBDb2RlY1NlcnZpY2VSZWdpc3RyYW50RnV6emVyOjppbnZva2VRdWVyeVNNKCkgeworICB2ZWN0b3I8QzJQYXJhbSAqPiBzdGFja1BhcmFtczsKKyAgdmVjdG9yPEMyUGFyYW06OkluZGV4PiBoZWFwUGFyYW1JbmRpY2VzOworICBpZiAobUZEUC0+Q29uc3VtZUJvb2woKSkgeworICAgIHN0YWNrUGFyYW1zID0ge307CisgICAgaGVhcFBhcmFtSW5kaWNlcyA9IHt9OworICB9IGVsc2UgeworICAgIHVpbnQzMl90IHN0cmVhbSA9IG1GRFAtPkNvbnN1bWVJbnRlZ3JhbDx1aW50MzJfdD4oKTsKKyAgICBtRnJhbWVSYXRlLnNldFN0cmVhbShzdHJlYW0pOworICAgIHN0YWNrUGFyYW1zLnB1c2hfYmFjaygmbUZyYW1lUmF0ZSk7CisgICAgaGVhcFBhcmFtSW5kaWNlcy5wdXNoX2JhY2sobUluZGV4KTsKKyAgfQorICB2ZWN0b3I8dW5pcXVlX3B0cjxDMlBhcmFtPj4gaGVhcFBhcmFtczsKKyAgbUgyQzItPnF1ZXJ5X3NtKHN0YWNrUGFyYW1zLCBoZWFwUGFyYW1JbmRpY2VzLCAmaGVhcFBhcmFtcyk7Cit9CisKK3ZvaWQgQ29kZWNTZXJ2aWNlUmVnaXN0cmFudEZ1enplcjo6aW52b2tlSDJDMkNvbXBvbmVudFN0b3JlKCkgeworICBpbml0SDJDMkNvbXBvbmVudFN0b3JlKCk7CisgIHNoYXJlZF9wdHI8QzJDb21wb25lbnQ+IGNvbXBvbmVudDsKKyAgc2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4gaW50ZXJmYWNlOworICBzdHJpbmcgYzJTdHJpbmcgPSBtRkRQLT5Db25zdW1lUmFuZG9tTGVuZ3RoU3RyaW5nKCk7CisgIG1IMkMyLT5jcmVhdGVDb21wb25lbnQoYzJTdHJpbmcsICZjb21wb25lbnQpOworICBtSDJDMi0+Y3JlYXRlSW50ZXJmYWNlKGMyU3RyaW5nLCAmaW50ZXJmYWNlKTsKKyAgaW52b2tlQ29uZmlnU00oKTsKKyAgaW52b2tlUXVlcnlTTSgpOworCisgIHZlY3RvcjxzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPj4gcGFyYW1zOworICBtSDJDMi0+cXVlcnlTdXBwb3J0ZWRQYXJhbXNfbmIoJnBhcmFtcyk7CisKKyAgQzJTdG9yZUlvblVzYWdlSW5mbyB1c2FnZUluZm87CisgIHN0ZDo6dmVjdG9yPEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeT4gcXVlcnkgPSB7CisgICAgICBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnk6OlBvc3NpYmxlKAorICAgICAgICAgIEMyUGFyYW1GaWVsZDo6TWFrZSh1c2FnZUluZm8sIHVzYWdlSW5mby51c2FnZSkpLAorICAgICAgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5OjpQb3NzaWJsZSgKKyAgICAgICAgICBDMlBhcmFtRmllbGQ6Ok1ha2UodXNhZ2VJbmZvLCB1c2FnZUluZm8uY2FwYWNpdHkpKSwKKyAgfTsKKyAgbUgyQzItPnF1ZXJ5U3VwcG9ydGVkVmFsdWVzX3NtKHF1ZXJ5KTsKKworICBtSDJDMi0+Z2V0TmFtZSgpOworICBzaGFyZWRfcHRyPEMyUGFyYW1SZWZsZWN0b3I+IHBhcmFtUmVmbGVjdG9yID0gbUgyQzItPmdldFBhcmFtUmVmbGVjdG9yKCk7CisgIGlmIChwYXJhbVJlZmxlY3RvcikgeworICAgIHBhcmFtUmVmbGVjdG9yLT5kZXNjcmliZShDMkNvbXBvbmVudERvbWFpblNldHRpbmc6OkNPUkVfSU5ERVgpOworICB9CisgIG1IMkMyLT5saXN0Q29tcG9uZW50cygpOworICBzaGFyZWRfcHRyPEMyR3JhcGhpY0J1ZmZlcj4gc3JjOworICBzaGFyZWRfcHRyPEMyR3JhcGhpY0J1ZmZlcj4gZHN0OworICBtSDJDMi0+Y29weUJ1ZmZlcihzcmMsIGRzdCk7Cit9CisKK3ZvaWQgQ29kZWNTZXJ2aWNlUmVnaXN0cmFudEZ1enplcjo6cHJvY2Vzcyhjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSkgeworICBtRkRQID0gbmV3IEZ1enplZERhdGFQcm92aWRlcihkYXRhLCBzaXplKTsKKyAgaW52b2tlSDJDMkNvbXBvbmVudFN0b3JlKCk7CisgIC8qKiBSZWdpc3RlckNvZGVjU2VydmljZXMgaXMgY2FsbGVkIGhlcmUgdG8gaW1wcm92ZSBjb2RlIGNvdmVyYWdlICovCisgIC8qKiBhcyBjdXJyZW50bHkgaXQgaXMgbm90IGNhbGxlZCBieSBjb2RlY1NlcnZpY2VSZWdpc3RyYW50ICAgICAgICovCisgIFJlZ2lzdGVyQ29kZWNTZXJ2aWNlcygpOworICBkZWxldGUgbUZEUDsKK30KKworZXh0ZXJuICJDIiBpbnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSkgeworICBDb2RlY1NlcnZpY2VSZWdpc3RyYW50RnV6emVyIGNvZGVjU2VydmljZVJlZ2lzdHJhbnRGdXp6ZXI7CisgIGNvZGVjU2VydmljZVJlZ2lzdHJhbnRGdXp6ZXIucHJvY2VzcyhkYXRhLCBzaXplKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYWNvZGVjL3NlY2NvbXBfcG9saWN5L21lZGlhc3djb2RlYy1hcm0ucG9saWN5IGIvc2VydmljZXMvbWVkaWFjb2RlYy9zZWNjb21wX3BvbGljeS9tZWRpYXN3Y29kZWMtYXJtLnBvbGljeQppbmRleCA5MDU4ZjEwLi40MWVmY2UwIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9tZWRpYWNvZGVjL3NlY2NvbXBfcG9saWN5L21lZGlhc3djb2RlYy1hcm0ucG9saWN5CisrKyBiL3NlcnZpY2VzL21lZGlhY29kZWMvc2VjY29tcF9wb2xpY3kvbWVkaWFzd2NvZGVjLWFybS5wb2xpY3kKQEAgLTg0LDUgKzg0LDYgQEAKIGdldGdpZDMyOiAxCiBnZXRlZ2lkMzI6IDEKIGdldGdyb3VwczMyOiAxCitzeXNpbmZvOiAxCiAKIEBpbmNsdWRlIC9hcGV4L2NvbS5hbmRyb2lkLm1lZGlhLnN3Y29kZWMvZXRjL3NlY2NvbXBfcG9saWN5L2NvZGVfY292ZXJhZ2UuYXJtLnBvbGljeQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvbWVkaWFjb2RlYy9zZWNjb21wX3BvbGljeS9tZWRpYXN3Y29kZWMtYXJtNjQucG9saWN5IGIvc2VydmljZXMvbWVkaWFjb2RlYy9zZWNjb21wX3BvbGljeS9tZWRpYXN3Y29kZWMtYXJtNjQucG9saWN5CmluZGV4IDRjNTFhOWMuLmUxNTFhMDYgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL21lZGlhY29kZWMvc2VjY29tcF9wb2xpY3kvbWVkaWFzd2NvZGVjLWFybTY0LnBvbGljeQorKysgYi9zZXJ2aWNlcy9tZWRpYWNvZGVjL3NlY2NvbXBfcG9saWN5L21lZGlhc3djb2RlYy1hcm02NC5wb2xpY3kKQEAgLTc4LDUgKzc4LDYgQEAKIGdldGdpZDogMQogZ2V0ZWdpZDogMQogZ2V0Z3JvdXBzOiAxCitzeXNpbmZvOiAxCiAKIEBpbmNsdWRlIC9hcGV4L2NvbS5hbmRyb2lkLm1lZGlhLnN3Y29kZWMvZXRjL3NlY2NvbXBfcG9saWN5L2NvZGVfY292ZXJhZ2UuYXJtNjQucG9saWN5CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYWxvZy9BbmRyb2lkLmJwIGIvc2VydmljZXMvbWVkaWFsb2cvQW5kcm9pZC5icAppbmRleCBjZmM0YzQwLi44MDg4ZWYwIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9tZWRpYWxvZy9BbmRyb2lkLmJwCisrKyBiL3NlcnZpY2VzL21lZGlhbG9nL0FuZHJvaWQuYnAKQEAgLTI2LDYgKzI2LDcgQEAKICAgICAgICAgImxpYm1lZGlhdXRpbHMiLAogICAgICAgICAibGlibmJsb2ciLAogICAgICAgICAibGlidXRpbHMiLAorICAgICAgICAicGFja2FnZW1hbmFnZXJfYWlkbC1jcHAiLAogICAgIF0sCiAKICAgICBjZmxhZ3M6IFsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL21lZGlhbWV0cmljcy9BbmRyb2lkLmJwIGIvc2VydmljZXMvbWVkaWFtZXRyaWNzL0FuZHJvaWQuYnAKaW5kZXggMDM1MWQyZC4uNzRlNDcxNSAxMDA2NDQKLS0tIGEvc2VydmljZXMvbWVkaWFtZXRyaWNzL0FuZHJvaWQuYnAKKysrIGIvc2VydmljZXMvbWVkaWFtZXRyaWNzL0FuZHJvaWQuYnAKQEAgLTExNCw2ICsxMTQsNyBAQAogICAgICAgICAibGlibWVkaWF1dGlscyIsCiAgICAgICAgICJsaWJ1dGlscyIsCiAgICAgICAgICJtZWRpYW1ldHJpY3NzZXJ2aWNlLWFpZGwtY3BwIiwKKyAgICAgICAgInBhY2thZ2VtYW5hZ2VyX2FpZGwtY3BwIiwKICAgICBdLAogICAgIGhlYWRlcl9saWJzOiBbCiAgICAgICAgICJsaWJhdWRpb3V0aWxzX2hlYWRlcnMiLApAQCAtMTcyLDYgKzE3Myw3IEBACiAgICAgICAgICJsaWJzdGF0c3B1bGwiLAogICAgICAgICAibGlic3RhdHNzb2NrZXQiLAogICAgICAgICAibGlidXRpbHMiLAorICAgICAgICAicGFja2FnZW1hbmFnZXJfYWlkbC1jcHAiLAogICAgIF0sCiAKICAgICBleHBvcnRfc2hhcmVkX2xpYl9oZWFkZXJzOiBbCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYW1ldHJpY3MvVHJhbnNhY3Rpb25Mb2cuaCBiL3NlcnZpY2VzL21lZGlhbWV0cmljcy9UcmFuc2FjdGlvbkxvZy5oCmluZGV4IDBjYTQ2MzkuLmZkNDI1MTggMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL21lZGlhbWV0cmljcy9UcmFuc2FjdGlvbkxvZy5oCisrKyBiL3NlcnZpY2VzL21lZGlhbWV0cmljcy9UcmFuc2FjdGlvbkxvZy5oCkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgICAgICAgICAgICArK2l0KSB7CiAgICAgICAgICAgICBpZiAobGwgPD0gMCkgYnJlYWs7CiAgICAgICAgICAgICBpZiAocHJlZml4ICE9IG51bGxwdHIgJiYgIXN0YXJ0c1dpdGgoaXQtPmZpcnN0LCBwcmVmaXgpKSBicmVhazsKLSAgICAgICAgICAgIGF1dG8gW3MsIGxdID0gZHVtcE1hcFRpbWVJdGVtKGl0LT5zZWNvbmQsIGxsIC0gMSwgc2luY2VOcywgcHJlZml4KTsKKyAgICAgICAgICAgIHN0ZDo6dGllKHMsIGwpID0gZHVtcE1hcFRpbWVJdGVtKGl0LT5zZWNvbmQsIGxsIC0gMSwgc2luY2VOcywgcHJlZml4KTsKICAgICAgICAgICAgIGlmIChsID09IDApIGNvbnRpbnVlOyAvLyBkb24ndCBzaG93IGVtcHR5IGdyb3VwcyAoZHVlIHRvIHNpbmNlTnMpLgogICAgICAgICAgICAgc3MgPDwgIiAiIDw8IGl0LT5maXJzdCA8PCAiXG4iIDw8IHM7CiAgICAgICAgICAgICBsbCAtPSBsICsgMTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL21lZGlhbWV0cmljcy9mdXp6ZXIvQW5kcm9pZC5icCBiL3NlcnZpY2VzL21lZGlhbWV0cmljcy9mdXp6ZXIvQW5kcm9pZC5icAppbmRleCBiMDNlNTE4Li45ZGE3MjgyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9tZWRpYW1ldHJpY3MvZnV6emVyL0FuZHJvaWQuYnAKKysrIGIvc2VydmljZXMvbWVkaWFtZXRyaWNzL2Z1enplci9BbmRyb2lkLmJwCkBAIC01Niw2ICs1Niw3IEBACiAgICAgICAgICJsaWJzdGF0c3NvY2tldCIsCiAgICAgICAgICJsaWJ1dGlscyIsCiAgICAgICAgICJtZWRpYW1ldHJpY3NzZXJ2aWNlLWFpZGwtY3BwIiwKKyAgICAgICAgInBhY2thZ2VtYW5hZ2VyX2FpZGwtY3BwIiwKICAgICBdLAogCiAgICAgaW5jbHVkZV9kaXJzOiBbCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYW1ldHJpY3MvZnV6emVyL21lZGlhbWV0cmljc19zZXJ2aWNlX2Z1enplci5jcHAgYi9zZXJ2aWNlcy9tZWRpYW1ldHJpY3MvZnV6emVyL21lZGlhbWV0cmljc19zZXJ2aWNlX2Z1enplci5jcHAKaW5kZXggOGIwYjQ3OS4uMDZhYjE2ZSAxMDA2NDQKLS0tIGEvc2VydmljZXMvbWVkaWFtZXRyaWNzL2Z1enplci9tZWRpYW1ldHJpY3Nfc2VydmljZV9mdXp6ZXIuY3BwCisrKyBiL3NlcnZpY2VzL21lZGlhbWV0cmljcy9mdXp6ZXIvbWVkaWFtZXRyaWNzX3NlcnZpY2VfZnV6emVyLmNwcApAQCAtNDgsNiArNDgsNyBAQAogICAgIHZvaWQgaW52b2tlQXVkaW9BbmFseXRpY3MoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUpOwogICAgIHZvaWQgaW52b2tlVGltZWRBY3Rpb24oY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUpOwogICAgIHZvaWQgcHJvY2Vzcyhjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisgICAgc3RkOjphdG9taWNfaW50IG1WYWx1ZSA9IDA7CiB9OwogCiB2b2lkIE1lZGlhTWV0cmljc1NlcnZpY2VGdXp6ZXI6Omludm9rZVN0YXJ0c1dpdGgoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUpIHsKQEAgLTM0MiwxMSArMzQzLDEwIEBACiB2b2lkIE1lZGlhTWV0cmljc1NlcnZpY2VGdXp6ZXI6Omludm9rZVRpbWVkQWN0aW9uKGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBzaXplKSB7CiAgICAgRnV6emVkRGF0YVByb3ZpZGVyIGZkcCA9IEZ1enplZERhdGFQcm92aWRlcihkYXRhLCBzaXplKTsKICAgICBhbmRyb2lkOjptZWRpYW1ldHJpY3M6OlRpbWVkQWN0aW9uIHRpbWVkQWN0aW9uOwotICAgIHN0ZDo6YXRvbWljX2ludCB2YWx1ZSA9IDA7CiAKICAgICB3aGlsZSAoZmRwLnJlbWFpbmluZ19ieXRlcygpKSB7CiAgICAgICAgIHRpbWVkQWN0aW9uLnBvc3RJbihzdGQ6OmNocm9ubzo6c2Vjb25kcyhmZHAuQ29uc3VtZUludGVncmFsPGludDMyX3Q+KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZ2YWx1ZV0geyArK3ZhbHVlOyB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGlzXSB7ICsrbVZhbHVlOyB9KTsKICAgICAgICAgdGltZWRBY3Rpb24uc2l6ZSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL21lZGlhbWV0cmljcy90ZXN0cy9BbmRyb2lkLmJwIGIvc2VydmljZXMvbWVkaWFtZXRyaWNzL3Rlc3RzL0FuZHJvaWQuYnAKaW5kZXggM2JhZjczOS4uZjQ2ZmJhZCAxMDA2NDQKLS0tIGEvc2VydmljZXMvbWVkaWFtZXRyaWNzL3Rlc3RzL0FuZHJvaWQuYnAKKysrIGIvc2VydmljZXMvbWVkaWFtZXRyaWNzL3Rlc3RzL0FuZHJvaWQuYnAKQEAgLTMzLDYgKzMzLDcgQEAKICAgICAgICAgImxpYm1lZGlhdXRpbHMiLAogICAgICAgICAibGlidXRpbHMiLAogICAgICAgICAibWVkaWFtZXRyaWNzc2VydmljZS1haWRsLWNwcCIsCisgICAgICAgICJwYWNrYWdlbWFuYWdlcl9haWRsLWNwcCIsCiAgICAgXSwKIAogICAgIGhlYWRlcl9saWJzOiBbCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYXJlc291cmNlbWFuYWdlci9BbmRyb2lkLmJwIGIvc2VydmljZXMvbWVkaWFyZXNvdXJjZW1hbmFnZXIvQW5kcm9pZC5icAppbmRleCBmMzEyMDJiLi41ZDgwNzQ0IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9tZWRpYXJlc291cmNlbWFuYWdlci9BbmRyb2lkLmJwCisrKyBiL3NlcnZpY2VzL21lZGlhcmVzb3VyY2VtYW5hZ2VyL0FuZHJvaWQuYnAKQEAgLTkwLDcgKzkwLDcgQEAKICAgICBdLAogCiAgICAgc3RhdGljX2xpYnM6IFsKLSAgICAgICAgInJlc291cmNlb2JzZXJ2ZXJfYWlkbF9pbnRlcmZhY2UtVjEtbmRrX3BsYXRmb3JtIiwKKyAgICAgICAgInJlc291cmNlb2JzZXJ2ZXJfYWlkbF9pbnRlcmZhY2UtVjEtbmRrIiwKICAgICBdLAogCiAgICAgaW5jbHVkZV9kaXJzOiBbImZyYW1ld29ya3MvYXYvaW5jbHVkZSJdLApkaWZmIC0tZ2l0IGEvc2VydmljZXMvbWVkaWFyZXNvdXJjZW1hbmFnZXIvdGVzdC9BbmRyb2lkLmJwIGIvc2VydmljZXMvbWVkaWFyZXNvdXJjZW1hbmFnZXIvdGVzdC9BbmRyb2lkLmJwCmluZGV4IGVjNGJhNTguLjYxODYyNmYgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL21lZGlhcmVzb3VyY2VtYW5hZ2VyL3Rlc3QvQW5kcm9pZC5icAorKysgYi9zZXJ2aWNlcy9tZWRpYXJlc291cmNlbWFuYWdlci90ZXN0L0FuZHJvaWQuYnAKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB0ZXN0X3N1aXRlczogWyJkZXZpY2UtdGVzdHMiXSwKICAgICBzdGF0aWNfbGliczogWwogICAgICAgICAibGlicmVzb3VyY2VtYW5hZ2Vyc2VydmljZSIsCi0gICAgICAgICJyZXNvdXJjZW9ic2VydmVyX2FpZGxfaW50ZXJmYWNlLVYxLW5ka19wbGF0Zm9ybSIsCisgICAgICAgICJyZXNvdXJjZW9ic2VydmVyX2FpZGxfaW50ZXJmYWNlLVYxLW5kayIsCiAgICAgXSwKICAgICBzaGFyZWRfbGliczogWwogICAgICAgICAibGliYmluZGVyIiwKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL21lZGlhdHJhbnNjb2RpbmcvQW5kcm9pZC5icCBiL3NlcnZpY2VzL21lZGlhdHJhbnNjb2RpbmcvQW5kcm9pZC5icAppbmRleCBhOWZkMTRmLi5mYTVlYjRlIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9tZWRpYXRyYW5zY29kaW5nL0FuZHJvaWQuYnAKKysrIGIvc2VydmljZXMvbWVkaWF0cmFuc2NvZGluZy9BbmRyb2lkLmJwCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgXSwKIAogICAgIHN0YXRpY19saWJzOiBbCi0gICAgICAgICJtZWRpYXRyYW5zY29kaW5nX2FpZGxfaW50ZXJmYWNlLW5ka19wbGF0Zm9ybSIsCisgICAgICAgICJtZWRpYXRyYW5zY29kaW5nX2FpZGxfaW50ZXJmYWNlLW5kayIsCiAgICAgXSwKIAogICAgIGNmbGFnczogWwpAQCAtODAsNyArODAsNyBAQAogICAgIF0sCiAKICAgICBzdGF0aWNfbGliczogWwotICAgICAgICAibWVkaWF0cmFuc2NvZGluZ19haWRsX2ludGVyZmFjZS1uZGtfcGxhdGZvcm0iLAorICAgICAgICAibWVkaWF0cmFuc2NvZGluZ19haWRsX2ludGVyZmFjZS1uZGsiLAogICAgIF0sCiAKICAgICBjZmxhZ3M6IFsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL21lZGlhdHJhbnNjb2RpbmcvdGVzdHMvQW5kcm9pZC5icCBiL3NlcnZpY2VzL21lZGlhdHJhbnNjb2RpbmcvdGVzdHMvQW5kcm9pZC5icAppbmRleCBjYjE4MGVjLi5hZTEzNjU2IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9tZWRpYXRyYW5zY29kaW5nL3Rlc3RzL0FuZHJvaWQuYnAKKysrIGIvc2VydmljZXMvbWVkaWF0cmFuc2NvZGluZy90ZXN0cy9BbmRyb2lkLmJwCkBAIC0zNCw4ICszNCw4IEBACiAgICAgXSwKIAogICAgIHN0YXRpY19saWJzOiBbCi0gICAgICAgICJtZWRpYXRyYW5zY29kaW5nX2FpZGxfaW50ZXJmYWNlLW5ka19wbGF0Zm9ybSIsCi0gICAgICAgICJyZXNvdXJjZW1hbmFnZXJfYWlkbF9pbnRlcmZhY2UtbmRrX3BsYXRmb3JtIiwKKyAgICAgICAgIm1lZGlhdHJhbnNjb2RpbmdfYWlkbF9pbnRlcmZhY2UtbmRrIiwKKyAgICAgICAgInJlc291cmNlbWFuYWdlcl9haWRsX2ludGVyZmFjZS1uZGsiLAogICAgICAgICAibGlibWVkaWF0cmFuc2NvZGluZ3NlcnZpY2UiLAogICAgIF0sCiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL21lZGlhdHJhbnNjb2RpbmcvdGVzdHMvTWVkaWFUcmFuc2NvZGluZ1NlcnZpY2VUZXN0SGVscGVyLmggYi9zZXJ2aWNlcy9tZWRpYXRyYW5zY29kaW5nL3Rlc3RzL01lZGlhVHJhbnNjb2RpbmdTZXJ2aWNlVGVzdEhlbHBlci5oCmluZGV4IDBjYjJmYWQuLjhlMTdmNTUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL21lZGlhdHJhbnNjb2RpbmcvdGVzdHMvTWVkaWFUcmFuc2NvZGluZ1NlcnZpY2VUZXN0SGVscGVyLmgKKysrIGIvc2VydmljZXMvbWVkaWF0cmFuc2NvZGluZy90ZXN0cy9NZWRpYVRyYW5zY29kaW5nU2VydmljZVRlc3RIZWxwZXIuaApAQCAtMjU5LDkgKzI1OSw3IEBACiBzdGF0aWMgY29uc3RleHByIGJvb2wgc3VjY2VzcyA9IHRydWU7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgZmFpbCA9IGZhbHNlOwogCi1zdHJ1Y3QgVGVzdENsaWVudENhbGxiYWNrIDogcHVibGljIEJuVHJhbnNjb2RpbmdDbGllbnRDYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgRXZlbnRUcmFja2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBzdGQ6OmVuYWJsZV9zaGFyZWRfZnJvbV90aGlzPFRlc3RDbGllbnRDYWxsYmFjaz4geworc3RydWN0IFRlc3RDbGllbnRDYWxsYmFjayA6IHB1YmxpYyBCblRyYW5zY29kaW5nQ2xpZW50Q2FsbGJhY2ssIHB1YmxpYyBFdmVudFRyYWNrZXIgewogICAgIFRlc3RDbGllbnRDYWxsYmFjayhjb25zdCBjaGFyKiBwYWNrYWdlTmFtZSwgaW50MzJfdCBpZCkKICAgICAgICAgICA6IG1DbGllbnRJZChpZCksIG1DbGllbnRQaWQoUElEKGlkKSksIG1DbGllbnRVaWQoVUlEKGlkKSksIG1QYWNrYWdlTmFtZShwYWNrYWdlTmFtZSkgewogICAgICAgICBBTE9HSSgiVGVzdENsaWVudENhbGxiYWNrICVkIGNyZWF0ZWQ6IHBpZCAlZCwgdWlkICVkIiwgaWQsIFBJRChpZCksIFVJRChpZCkpOwpAQCAtMzQ4LDggKzM0Niw4IEBACiAgICAgICAgIEFMT0dEKCJyZWdpc3RlcmluZyAlcyB3aXRoIHVpZCAlZCIsIHBhY2thZ2VOYW1lLCBtQ2xpZW50VWlkKTsKIAogICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8SVRyYW5zY29kaW5nQ2xpZW50PiBjbGllbnQ7Ci0gICAgICAgIFN0YXR1cyBzdGF0dXMgPQotICAgICAgICAgICAgICAgIHNlcnZpY2UtPnJlZ2lzdGVyQ2xpZW50KHNoYXJlZF9mcm9tX3RoaXMoKSwga0NsaWVudE5hbWUsIHBhY2thZ2VOYW1lLCAmY2xpZW50KTsKKyAgICAgICAgU3RhdHVzIHN0YXR1cyA9IHNlcnZpY2UtPnJlZ2lzdGVyQ2xpZW50KHJlZjxUZXN0Q2xpZW50Q2FsbGJhY2s+KCksIGtDbGllbnROYW1lLCBwYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbGllbnQpOwogCiAgICAgICAgIG1DbGllbnQgPSBzdGF0dXMuaXNPaygpID8gY2xpZW50IDogbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL21pbmlqYWlsL0FuZHJvaWQuYnAgYi9zZXJ2aWNlcy9taW5pamFpbC9BbmRyb2lkLmJwCmluZGV4IDNhODllMTIuLjAzODE5N2YgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL21pbmlqYWlsL0FuZHJvaWQuYnAKKysrIGIvc2VydmljZXMvbWluaWphaWwvQW5kcm9pZC5icApAQCAtMzEsMTcgKzMxLDYgQEAKICAgICBleHBvcnRfaW5jbHVkZV9kaXJzOiBbIi4iXSwKIH0KIAotLy8gQnkgYWRkaW5nICJ2ZW5kb3JfYXZhaWxhYmxlOiB0cnVlIiB0byAibGliYXZzZXJ2aWNlc19taW5pamFpbCIsIHdlIGRvbid0Ci0vLyBuZWVkIHRvIGhhdmUgImxpYmF2c2VydmljZXNfbWluaWphaWxfdmVuZG9yIiBhbnkgbG9uZ2VyLgotLy8gImxpYmF2c2VydmljZXNfbWluaWphaWxfdmVuZG9yIiB3aWxsIGJlIHJlbW92ZWQsIG9uY2Ugd2UgcmVwbGFjZSBpdCB3aXRoCi0vLyAibGliYXZzZXJ2aWNlc19taW5pamFpbCIgaW4gYWxsIHZlbmRvciBtb2R1bGVzLiAoYi8xNDYzMTM3MTApCi1jY19saWJyYXJ5X3NoYXJlZCB7Ci0gICAgbmFtZTogImxpYmF2c2VydmljZXNfbWluaWphaWxfdmVuZG9yIiwKLSAgICB2ZW5kb3I6IHRydWUsCi0gICAgZGVmYXVsdHM6IFsibGliYXZzZXJ2aWNlc19taW5pamFpbF9kZWZhdWx0cyJdLAotICAgIGV4cG9ydF9pbmNsdWRlX2RpcnM6IFsiLiJdLAotfQotCiAvLyBVbml0IHRlc3RzLgogY2NfdGVzdCB7CiAgICAgbmFtZTogImxpYmF2c2VydmljZXNfbWluaWphaWxfdW5pdHRlc3QiLApkaWZmIC0tZ2l0IGEvc2VydmljZXMvb2JvZXNlcnZpY2UvQW5kcm9pZC5icCBiL3NlcnZpY2VzL29ib2VzZXJ2aWNlL0FuZHJvaWQuYnAKaW5kZXggNGM1ODA0MC4uMzU2M2Q2NiAxMDA2NDQKLS0tIGEvc2VydmljZXMvb2JvZXNlcnZpY2UvQW5kcm9pZC5icAorKysgYi9zZXJ2aWNlcy9vYm9lc2VydmljZS9BbmRyb2lkLmJwCkBAIC02OCw2ICs2OCw3IEBACiAgICAgICAgICJhYXVkaW8tYWlkbC1jcHAiLAogICAgICAgICAiZnJhbWV3b3JrLXBlcm1pc3Npb24tYWlkbC1jcHAiLAogICAgICAgICAibGliYXVkaW9jbGllbnRfYWlkbF9jb252ZXJzaW9uIiwKKyAgICAgICAgInBhY2thZ2VtYW5hZ2VyX2FpZGwtY3BwIiwKICAgICBdLAogCiAgICAgZXhwb3J0X3NoYXJlZF9saWJfaGVhZGVyczogWwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvdHVuZXIvQW5kcm9pZC5icCBiL3NlcnZpY2VzL3R1bmVyL0FuZHJvaWQuYnAKaW5kZXggY2QxMWM4OC4uMWRjZmU1MyAxMDA2NDQKLS0tIGEvc2VydmljZXMvdHVuZXIvQW5kcm9pZC5icAorKysgYi9zZXJ2aWNlcy90dW5lci9BbmRyb2lkLmJwCkBAIC04OSwxMyArODksMTQgQEAKICAgICAgICAgImxpYmxvZyIsCiAgICAgICAgICJsaWJtZWRpYSIsCiAgICAgICAgICJsaWJ1dGlscyIsCi0gICAgICAgICJ0dl90dW5lcl9haWRsX2ludGVyZmFjZS1uZGtfcGxhdGZvcm0iLAotICAgICAgICAidHZfdHVuZXJfcmVzb3VyY2VfbWFuYWdlcl9haWRsX2ludGVyZmFjZS1uZGtfcGxhdGZvcm0iLAorICAgICAgICAicGFja2FnZW1hbmFnZXJfYWlkbC1jcHAiLAorICAgICAgICAidHZfdHVuZXJfYWlkbF9pbnRlcmZhY2UtbmRrIiwKKyAgICAgICAgInR2X3R1bmVyX3Jlc291cmNlX21hbmFnZXJfYWlkbF9pbnRlcmZhY2UtbmRrIiwKICAgICAgICAgInR2X3R1bmVyX3Jlc291cmNlX21hbmFnZXJfYWlkbF9pbnRlcmZhY2UtY3BwIiwKICAgICBdLAogCiAgICAgc3RhdGljX2xpYnM6IFsKLSAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuY29tbW9uLmZtcS1WMS1uZGtfcGxhdGZvcm0iLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5jb21tb24uZm1xLVYxLW5kayIsCiAgICAgICAgICJsaWJhaWRsY29tbW9uc3VwcG9ydCIsCiAgICAgXSwKIApAQCAtMTI4LDEyICsxMjksMTIgQEAKICAgICAgICAgImxpYmxvZyIsCiAgICAgICAgICJsaWJ0dW5lcnNlcnZpY2UiLAogICAgICAgICAibGlidXRpbHMiLAotICAgICAgICAidHZfdHVuZXJfcmVzb3VyY2VfbWFuYWdlcl9haWRsX2ludGVyZmFjZS1uZGtfcGxhdGZvcm0iLAorICAgICAgICAidHZfdHVuZXJfcmVzb3VyY2VfbWFuYWdlcl9haWRsX2ludGVyZmFjZS1uZGsiLAogICAgICAgICAidHZfdHVuZXJfcmVzb3VyY2VfbWFuYWdlcl9haWRsX2ludGVyZmFjZS1jcHAiLAogICAgIF0sCiAKICAgICBzdGF0aWNfbGliczogWwotICAgICAgICAidHZfdHVuZXJfYWlkbF9pbnRlcmZhY2UtbmRrX3BsYXRmb3JtIiwKKyAgICAgICAgInR2X3R1bmVyX2FpZGxfaW50ZXJmYWNlLW5kayIsCiAgICAgXSwKIAogICAgIGluaXRfcmM6IFsibWVkaWF0dW5lci5yYyJdLAo=