ZGlmZiAtLWdpdCBhLy5jbGFuZy1mb3JtYXQgYi8uY2xhbmctZm9ybWF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NjE0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi8uY2xhbmctZm9ybWF0CkBAIC0wLDAgKzEsMTMgQEAKK0Jhc2VkT25TdHlsZTogR29vZ2xlCitTdGFuZGFyZDogQ3BwMTEKK0FjY2Vzc01vZGlmaWVyT2Zmc2V0OiAtMgorQWxsb3dTaG9ydEZ1bmN0aW9uc09uQVNpbmdsZUxpbmU6IElubGluZQorQ29sdW1uTGltaXQ6IDEwMAorQ29tbWVudFByYWdtYXM6IE5PTElOVDouKgorRGVyaXZlUG9pbnRlckFsaWdubWVudDogZmFsc2UKK0luY2x1ZGVCbG9ja3M6IFByZXNlcnZlCitJbmRlbnRXaWR0aDogNAorQ29udGludWF0aW9uSW5kZW50V2lkdGg6IDgKK1BvaW50ZXJBbGlnbm1lbnQ6IExlZnQKK1RhYldpZHRoOiA0CitVc2VUYWI6IE5ldmVyCmRpZmYgLS1naXQgYS9BbmRyb2lkLmJwIGIvQW5kcm9pZC5icAppbmRleCA2MGYwZmYxLi5lZTYwOWUxIDEwMDY0NAotLS0gYS9BbmRyb2lkLmJwCisrKyBiL0FuZHJvaWQuYnAKQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgICAgIG1pbl9zZGtfdmVyc2lvbjogIjI5IiwKICAgICAgICAgICAgIGFwZXhfYXZhaWxhYmxlOiBbCiAgICAgICAgICAgICAgICAgIi8vYXBleF9hdmFpbGFibGU6cGxhdGZvcm0iLAotICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5ibHVldG9vdGgudXBkYXRhYmxlIiwKKyAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuYmx1ZXRvb3RoIiwKICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQubWVkaWEiLAogICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5tZWRpYS5zd2NvZGVjIiwKICAgICAgICAgICAgIF0sCkBAIC04Niw3ICs4Niw3IEBACiAgICAgbWluX3Nka192ZXJzaW9uOiAiMjkiLAogICAgIGFwZXhfYXZhaWxhYmxlOiBbCiAgICAgICAgICIvL2FwZXhfYXZhaWxhYmxlOnBsYXRmb3JtIiwKLSAgICAgICAgImNvbS5hbmRyb2lkLmJsdWV0b290aC51cGRhdGFibGUiLAorICAgICAgICAiY29tLmFuZHJvaWQuYmx1ZXRvb3RoIiwKICAgICAgICAgImNvbS5hbmRyb2lkLm1lZGlhIiwKICAgICAgICAgImNvbS5hbmRyb2lkLm1lZGlhLnN3Y29kZWMiLAogICAgIF0sCmRpZmYgLS1naXQgYS9hcGV4L09XTkVSUyBiL2FwZXgvT1dORVJTCmluZGV4IDU1ODdmNWYuLjU0ODAyZDQgMTAwNjQ0Ci0tLSBhL2FwZXgvT1dORVJTCisrKyBiL2FwZXgvT1dORVJTCkBAIC0xLDYgKzEsNyBAQAotY2h6QGdvb2dsZS5jb20KLWR3a2FuZ0Bnb29nbGUuY29tCitlc3NpY2tAZ29vZ2xlLmNvbQogaml5b25nQGdvb2dsZS5jb20KIGxham9zQGdvb2dsZS5jb20KLW1hcmNvbmVAZ29vZ2xlLmNvbQotd2ppYUBnb29nbGUuY29tCituY2hhbGtvQGdvb2dsZS5jb20KKworaW5jbHVkZSBwbGF0Zm9ybS9wYWNrYWdlcy9tb2R1bGVzL2NvbW1vbjovTU9EVUxFU19PV05FUlMKKwpkaWZmIC0tZ2l0IGEvYXBleC9tZWRpYXN3Y29kZWMuMzJyYyBiL2FwZXgvbWVkaWFzd2NvZGVjLjMycmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlhZWYzNgotLS0gL2Rldi9udWxsCisrKyBiL2FwZXgvbWVkaWFzd2NvZGVjLjMycmMKQEAgLTAsMCArMSw2IEBACitzZXJ2aWNlIG1lZGlhLnN3Y29kZWMgL2FwZXgvY29tLmFuZHJvaWQubWVkaWEuc3djb2RlYy9iaW4vbWVkaWFzd2NvZGVjCisgICAgY2xhc3MgbWFpbgorICAgIHVzZXIgbWVkaWFjb2RlYworICAgIGdyb3VwIGNhbWVyYSBkcm1ycGMgbWVkaWFkcm0KKyAgICBpb3ByaW8gcnQgNAorICAgIHRhc2tfcHJvZmlsZXMgUHJvY2Vzc0NhcGFjaXR5SGlnaApkaWZmIC0tZ2l0IGEvYXBleC9tZWRpYXRyYW5zY29kaW5nLjMycmMgYi9hcGV4L21lZGlhdHJhbnNjb2RpbmcuMzJyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTY5NDYyCi0tLSAvZGV2L251bGwKKysrIGIvYXBleC9tZWRpYXRyYW5zY29kaW5nLjMycmMKQEAgLTAsMCArMSwxMiBAQAorIyBtZWRpYS50cmFuc2NvZGluZyBzZXJ2aWNlIGlzIGRlZmluZWQgb24gY29tLmFuZHJvaWQubWVkaWEgYXBleCB3aGljaCBnb2VzIGJhY2sKKyMgdG8gQVBJMjksIGJ1dCB3ZSBvbmx5IHdhbnQgaXQgc3RhcnRlZCBvbiBBUEkzMSsgZGV2aWNlcy4gU28gd2UgZGVjbGFyZSBpdCBhcworIyAiZGlzYWJsZWQiIGFuZCBzdGFydCBpdCBleHBsaWNpdGx5IG9uIGJvb3QuCitzZXJ2aWNlIG1lZGlhLnRyYW5zY29kaW5nIC9hcGV4L2NvbS5hbmRyb2lkLm1lZGlhL2Jpbi9tZWRpYXRyYW5zY29kaW5nCisgICAgY2xhc3MgbWFpbgorICAgIHVzZXIgbWVkaWEKKyAgICBncm91cCBtZWRpYQorICAgIGlvcHJpbyBydCA0CisgICAgIyBSZXN0cmljdCB0byBsaXR0bGUgY29yZXMgb25seSB3aXRoIHN5c3RlbS1iYWNrZ3JvdW5kIGNwdXNldC4KKyAgICB0YXNrX3Byb2ZpbGVzIFNlcnZpY2VDYXBhY2l0eUxvdworICAgIGludGVyZmFjZSBhaWRsIG1lZGlhLnRyYW5zY29kaW5nCisgICAgZGlzYWJsZWQKZGlmZiAtLWdpdCBhL2NhbWVyYS9BbmRyb2lkLmJwIGIvY2FtZXJhL0FuZHJvaWQuYnAKaW5kZXggNjg3OGMyMC4uNGVkMzI2OSAxMDA2NDQKLS0tIGEvY2FtZXJhL0FuZHJvaWQuYnAKKysrIGIvY2FtZXJhL0FuZHJvaWQuYnAKQEAgLTQzLDYgKzQzLDEwIEBACiAgICAgXSwKIH0KIAorY2NfbGlicmFyeV9oZWFkZXJzIHsKKyAgICBuYW1lOiAiY2FtZXJhX2hlYWRlcnMiLAorICAgIGV4cG9ydF9pbmNsdWRlX2RpcnM6IFsiaW5jbHVkZSJdLAorfQogY2NfbGlicmFyeV9zaGFyZWQgewogICAgIG5hbWU6ICJsaWJjYW1lcmFfY2xpZW50IiwKIApkaWZmIC0tZ2l0IGEvY2FtZXJhL09XTkVSUyBiL2NhbWVyYS9PV05FUlMKaW5kZXggMWI1NDhlNC4uMmExZDUyMyAxMDA2NDQKLS0tIGEvY2FtZXJhL09XTkVSUworKysgYi9jYW1lcmEvT1dORVJTCkBAIC0xLDMgKzEsNCBAQAorCiAjIEJ1ZyBjb21wb25lbnQ6IDQxNzI3CiBldGFsdmFsYUBnb29nbGUuY29tCiBhcmFrZXNoQGdvb2dsZS5jb20KQEAgLTUsNCArNiwzIEBACiBqY2hvd2RoYXJ5QGdvb2dsZS5jb20KIHNodXpoZW53YW5nQGdvb2dsZS5jb20KIHJ1Y2hhbWtAZ29vZ2xlLmNvbQotCmRpZmYgLS1naXQgYS9jYW1lcmEvbmRrL2ltcGwvQUNhbWVyYU1hbmFnZXIuaCBiL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhTWFuYWdlci5oCmluZGV4IGNjYmZhYTkuLmRhODg3YTIgMTAwNjQ0Ci0tLSBhL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhTWFuYWdlci5oCisrKyBiL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhTWFuYWdlci5oCkBAIC0xMzksNiArMTM5LDggQEAKICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICAgICAgfQogICAgICAgICBib29sIG9wZXJhdG9yIDwgKGNvbnN0IENhbGxiYWNrJiBvdGhlcikgY29uc3QgeworI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xb3JkZXJlZC1jb21wYXJlLWZ1bmN0aW9uLXBvaW50ZXJzIgogICAgICAgICAgICAgaWYgKCp0aGlzID09IG90aGVyKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBpZiAobUNvbnRleHQgIT0gb3RoZXIubUNvbnRleHQpIHJldHVybiBtQ29udGV4dCA8IG90aGVyLm1Db250ZXh0OwogICAgICAgICAgICAgaWYgKG1QaHlzaWNhbENhbUF2YWlsYWJsZSAhPSBvdGhlci5tUGh5c2ljYWxDYW1BdmFpbGFibGUpIHsKQEAgLTE1Miw2ICsxNTQsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1BdmFpbGFibGUgIT0gb3RoZXIubUF2YWlsYWJsZSkgcmV0dXJuIG1BdmFpbGFibGUgPCBvdGhlci5tQXZhaWxhYmxlOwogICAgICAgICAgICAgcmV0dXJuIG1VbmF2YWlsYWJsZSA8IG90aGVyLm1VbmF2YWlsYWJsZTsKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCiAgICAgICAgIH0KICAgICAgICAgYm9vbCBvcGVyYXRvciA+IChjb25zdCBDYWxsYmFjayYgb3RoZXIpIGNvbnN0IHsKICAgICAgICAgICAgIHJldHVybiAoKnRoaXMgIT0gb3RoZXIgJiYgISgqdGhpcyA8IG90aGVyKSk7CmRpZmYgLS1naXQgYS9jYW1lcmEvbmRrL2ltcGwvQUNhbWVyYU1ldGFkYXRhLmNwcCBiL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhTWV0YWRhdGEuY3BwCmluZGV4IGRhYjJmZWYuLjA1MTI0YzAgMTAwNjQ0Ci0tLSBhL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhTWV0YWRhdGEuY3BwCisrKyBiL2NhbWVyYS9uZGsvaW1wbC9BQ2FtZXJhTWV0YWRhdGEuY3BwCkBAIC0xODIsNyArMTgyLDcgQEAKICAgICAgICAgaW50NjRfdCBmb3JtYXQgPSBlbnRyeS5kYXRhLmk2NFtpICsgU1RSRUFNX0ZPUk1BVF9PRkZTRVRdOwogICAgICAgICBpbnQ2NF90IHdpZHRoID0gZW50cnkuZGF0YS5pNjRbaSArIFNUUkVBTV9XSURUSF9PRkZTRVRdOwogICAgICAgICBpbnQ2NF90IGhlaWdodCA9IGVudHJ5LmRhdGEuaTY0W2kgKyBTVFJFQU1fSEVJR0hUX09GRlNFVF07Ci0gICAgICAgIGludDY0X3QgZHVyYXRpb24gPSBlbnRyeS5kYXRhLmkzMltpICsgU1RSRUFNX0RVUkFUSU9OX09GRlNFVF07CisgICAgICAgIGludDY0X3QgZHVyYXRpb24gPSBlbnRyeS5kYXRhLmk2NFtpICsgU1RSRUFNX0RVUkFUSU9OX09GRlNFVF07CiAKICAgICAgICAgLy8gTGVhdmUgdGhlIHVuZmlsdGVyZWQgZm9ybWF0IGluIHNvIGFwcHMgZGVwZW5kaW5nIG9uIHByZXZpb3VzIHdyb25nCiAgICAgICAgIC8vIGZpbHRlciBiZWhhdmlvciBjb250aW51ZSB0byB3b3JrCmRpZmYgLS1naXQgYS9jYW1lcmEvbmRrL25ka192ZW5kb3IvaW1wbC9BQ2FtZXJhTWFuYWdlci5oIGIvY2FtZXJhL25kay9uZGtfdmVuZG9yL2ltcGwvQUNhbWVyYU1hbmFnZXIuaAppbmRleCA4MzU5YmIxLi40NjYzNTI5IDEwMDY0NAotLS0gYS9jYW1lcmEvbmRrL25ka192ZW5kb3IvaW1wbC9BQ2FtZXJhTWFuYWdlci5oCisrKyBiL2NhbWVyYS9uZGsvbmRrX3ZlbmRvci9pbXBsL0FDYW1lcmFNYW5hZ2VyLmgKQEAgLTEzNiw2ICsxMzYsOCBAQAogICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwogICAgICAgICB9CiAgICAgICAgIGJvb2wgb3BlcmF0b3IgPCAoY29uc3QgQ2FsbGJhY2smIG90aGVyKSBjb25zdCB7CisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdvcmRlcmVkLWNvbXBhcmUtZnVuY3Rpb24tcG9pbnRlcnMiCiAgICAgICAgICAgICBpZiAoKnRoaXMgPT0gb3RoZXIpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGlmIChtQ29udGV4dCAhPSBvdGhlci5tQ29udGV4dCkgcmV0dXJuIG1Db250ZXh0IDwgb3RoZXIubUNvbnRleHQ7CiAgICAgICAgICAgICBpZiAobUF2YWlsYWJsZSAhPSBvdGhlci5tQXZhaWxhYmxlKSByZXR1cm4gbUF2YWlsYWJsZSA8IG90aGVyLm1BdmFpbGFibGU7CkBAIC0xNDYsNiArMTQ4LDcgQEAKICAgICAgICAgICAgIGlmIChtUGh5c2ljYWxDYW1VbmF2YWlsYWJsZSAhPSBvdGhlci5tUGh5c2ljYWxDYW1VbmF2YWlsYWJsZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1QaHlzaWNhbENhbVVuYXZhaWxhYmxlIDwgb3RoZXIubVBoeXNpY2FsQ2FtVW5hdmFpbGFibGU7CiAgICAgICAgICAgICByZXR1cm4gbVVuYXZhaWxhYmxlIDwgb3RoZXIubVVuYXZhaWxhYmxlOworI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKICAgICAgICAgfQogICAgICAgICBib29sIG9wZXJhdG9yID4gKGNvbnN0IENhbGxiYWNrJiBvdGhlcikgY29uc3QgewogICAgICAgICAgICAgcmV0dXJuICgqdGhpcyAhPSBvdGhlciAmJiAhKCp0aGlzIDwgb3RoZXIpKTsKZGlmZiAtLWdpdCBhL2NtZHMvT1dORVJTIGIvY21kcy9PV05FUlMKaW5kZXggMGQzMmFhYy4uYTQ4YzM3YSAxMDA2NDQKLS0tIGEvY21kcy9PV05FUlMKKysrIGIvY21kcy9PV05FUlMKQEAgLTEsMyArMSwzIEBACiBlbGF1cmVudEBnb29nbGUuY29tCitlc3NpY2tAZ29vZ2xlLmNvbQogbGFqb3NAZ29vZ2xlLmNvbQotbWFyY29uZUBnb29nbGUuY29tCmRpZmYgLS1naXQgYS9jbWRzL3N0YWdlZnJpZ2h0L0FuZHJvaWQuYnAgYi9jbWRzL3N0YWdlZnJpZ2h0L0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ3ODNkMwotLS0gL2Rldi9udWxsCisrKyBiL2NtZHMvc3RhZ2VmcmlnaHQvQW5kcm9pZC5icApAQCAtMCwwICsxLDI3OCBAQAorcGFja2FnZSB7CisgICAgZGVmYXVsdF9hcHBsaWNhYmxlX2xpY2Vuc2VzOiBbImZyYW1ld29ya3NfYXZfY21kc19zdGFnZWZyaWdodF9saWNlbnNlIl0sCit9CisKKy8vIEFkZGVkIGF1dG9tYXRpY2FsbHkgYnkgYSBsYXJnZS1zY2FsZS1jaGFuZ2UKKy8vIFNlZTogaHR0cDovL2dvL2FuZHJvaWQtbGljZW5zZS1mYXEKK2xpY2Vuc2UgeworICAgIG5hbWU6ICJmcmFtZXdvcmtzX2F2X2NtZHNfc3RhZ2VmcmlnaHRfbGljZW5zZSIsCisgICAgdmlzaWJpbGl0eTogWyI6X19zdWJwYWNrYWdlc19fIl0sCisgICAgbGljZW5zZV9raW5kczogWworICAgICAgICAiU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMCIsCisgICAgXSwKKyAgICBsaWNlbnNlX3RleHQ6IFsKKyAgICAgICAgIk5PVElDRSIsCisgICAgXSwKK30KKworY2NfYmluYXJ5IHsKKyAgICBuYW1lOiAic3RhZ2VmcmlnaHQiLAorCisgICAgc3JjczogWworICAgICAgICAiQXVkaW9QbGF5ZXIuY3BwIiwKKyAgICAgICAgInN0YWdlZnJpZ2h0LmNwcCIsCisgICAgICAgICJqcGVnLmNwcCIsCisgICAgICAgICJTaW5lU291cmNlLmNwcCIsCisgICAgXSwKKworICAgIGhlYWRlcl9saWJzOiBbCisgICAgICAgICJsaWJtZWRpYW1ldHJpY3NfaGVhZGVycyIsCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9oZWFkZXJzIiwKKyAgICBdLAorCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0IiwKKyAgICAgICAgImxpYm1lZGlhIiwKKyAgICAgICAgImxpYm1lZGlhX2NvZGVjbGlzdCIsCisgICAgICAgICJsaWJ1dGlscyIsCisgICAgICAgICJsaWJiaW5kZXIiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiIsCisgICAgICAgICJsaWJqcGVnIiwKKyAgICAgICAgImxpYnVpIiwKKyAgICAgICAgImxpYmd1aSIsCisgICAgICAgICJsaWJjdXRpbHMiLAorICAgICAgICAibGlibG9nIiwKKyAgICAgICAgImxpYmhpZGxiYXNlIiwKKyAgICAgICAgImxpYmRhdGFzb3VyY2UiLAorICAgICAgICAibGliYXVkaW9jbGllbnQiLAorICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5tZWRpYS5vbXhAMS4wIiwKKyAgICAgICAgImZyYW1ld29yay1wZXJtaXNzaW9uLWFpZGwtY3BwIiwKKyAgICBdLAorCisgICAgc3RhdGljX2xpYnM6IFsiZnJhbWV3b3JrLXBlcm1pc3Npb24tYWlkbC1jcHAiXSwKKworICAgIGNmbGFnczogWworICAgICAgICAiLVduby1tdWx0aWNoYXIiLAorICAgIF0sCisKKyAgICBzeXN0ZW1fZXh0X3NwZWNpZmljOiB0cnVlLAorfQorCitjY19iaW5hcnkgeworICAgIG5hbWU6ICJyZWNvcmQiLAorCisgICAgc3JjczogWworICAgICAgICAiQXVkaW9QbGF5ZXIuY3BwIiwKKyAgICAgICAgIlNpbmVTb3VyY2UuY3BwIiwKKyAgICAgICAgInJlY29yZC5jcHAiLAorICAgIF0sCisKKyAgICBoZWFkZXJfbGliczogWworICAgICAgICAibGlibWVkaWFtZXRyaWNzX2hlYWRlcnMiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfaGVhZGVycyIsCisgICAgICAgICJjYW1lcmFfaGVhZGVycyIsCisgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJzdGFnZWZyaWdodCIsCisgICAgICAgICJsaWJtZWRpYSIsCisgICAgICAgICJsaWJsb2ciLAorICAgICAgICAibGlidXRpbHMiLAorICAgICAgICAibGliYmluZGVyIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24iLAorICAgICAgICAibGliZGF0YXNvdXJjZSIsCisgICAgICAgICJsaWJhdWRpb2NsaWVudCIsCisgICAgICAgICJmcmFtZXdvcmstcGVybWlzc2lvbi1haWRsLWNwcCIsCisgICAgXSwKKworICAgIGNmbGFnczogWworICAgICAgICAiLVduby1tdWx0aWNoYXIiLAorICAgIF0sCit9CisKK2NjX2JpbmFyeSB7CisgICAgbmFtZTogInJlY29yZHZpZGVvIiwKKworICAgIHNyY3M6IFsKKyAgICAgICAgIkF1ZGlvUGxheWVyLmNwcCIsCisgICAgICAgICJyZWNvcmR2aWRlby5jcHAiLAorICAgIF0sCisKKyAgICBoZWFkZXJfbGliczogWworICAgICAgICAibGlibWVkaWFtZXRyaWNzX2hlYWRlcnMiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfaGVhZGVycyIsCisgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJzdGFnZWZyaWdodCIsCisgICAgICAgICJsaWJtZWRpYSIsCisgICAgICAgICJsaWJsb2ciLAorICAgICAgICAibGlidXRpbHMiLAorICAgICAgICAibGliYmluZGVyIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24iLAorICAgICAgICAibGliYXVkaW9jbGllbnQiLAorICAgICAgICAiZnJhbWV3b3JrLXBlcm1pc3Npb24tYWlkbC1jcHAiLAorICAgIF0sCisKKyAgICBjZmxhZ3M6IFsKKyAgICAgICAgIi1Xbm8tbXVsdGljaGFyIiwKKyAgICBdLAorfQorCitjY19iaW5hcnkgeworICAgIG5hbWU6ICJhdWRpb2xvb3AiLAorCisgICAgc3JjczogWworICAgICAgICAiQXVkaW9QbGF5ZXIuY3BwIiwKKyAgICAgICAgIlNpbmVTb3VyY2UuY3BwIiwKKyAgICAgICAgImF1ZGlvbG9vcC5jcHAiLAorICAgIF0sCisKKyAgICBoZWFkZXJfbGliczogWworICAgICAgICAibGlibWVkaWFtZXRyaWNzX2hlYWRlcnMiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfaGVhZGVycyIsCisgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJzdGFnZWZyaWdodCIsCisgICAgICAgICJsaWJtZWRpYSIsCisgICAgICAgICJsaWJsb2ciLAorICAgICAgICAibGlidXRpbHMiLAorICAgICAgICAibGliYmluZGVyIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24iLAorICAgICAgICAibGliYXVkaW9jbGllbnQiLAorICAgICAgICAiZnJhbWV3b3JrLXBlcm1pc3Npb24tYWlkbC1jcHAiLAorICAgIF0sCisKKyAgICBjZmxhZ3M6IFsKKyAgICAgICAgIi1Xbm8tbXVsdGljaGFyIiwKKyAgICBdLAorfQorCitjY19iaW5hcnkgeworICAgIG5hbWU6ICJzdHJlYW0iLAorCisgICAgc3JjczogWyJzdHJlYW0uY3BwIl0sCisKKyAgICBoZWFkZXJfbGliczogWworICAgICAgICAibGlibWVkaWFtZXRyaWNzX2hlYWRlcnMiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfaGVhZGVycyIsCisgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJzdGFnZWZyaWdodCIsCisgICAgICAgICJsaWJsb2ciLAorICAgICAgICAibGlidXRpbHMiLAorICAgICAgICAibGliYmluZGVyIiwKKyAgICAgICAgImxpYnVpIiwKKyAgICAgICAgImxpYmd1aSIsCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9mb3VuZGF0aW9uIiwKKyAgICAgICAgImxpYm1lZGlhIiwKKyAgICAgICAgImxpYmN1dGlscyIsCisgICAgICAgICJsaWJkYXRhc291cmNlIiwKKyAgICBdLAorCisgICAgY2ZsYWdzOiBbCisgICAgICAgICItV25vLW11bHRpY2hhciIsCisgICAgXSwKK30KKworY2NfYmluYXJ5IHsKKyAgICBuYW1lOiAiY29kZWMiLAorCisgICAgc3JjczogWworICAgICAgICAiY29kZWMuY3BwIiwKKyAgICAgICAgIlNpbXBsZVBsYXllci5jcHAiLAorICAgIF0sCisKKyAgICBoZWFkZXJfbGliczogWworICAgICAgICAibGlibWVkaWFkcm1faGVhZGVycyIsCisgICAgICAgICJsaWJtZWRpYW1ldHJpY3NfaGVhZGVycyIsCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9oZWFkZXJzIiwKKyAgICBdLAorCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0IiwKKyAgICAgICAgImxpYmxvZyIsCisgICAgICAgICJsaWJ1dGlscyIsCisgICAgICAgICJsaWJiaW5kZXIiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiIsCisgICAgICAgICJsaWJtZWRpYSIsCisgICAgICAgICJsaWJtZWRpYV9vbXgiLAorICAgICAgICAibGliYXVkaW9jbGllbnQiLAorICAgICAgICAibGlidWkiLAorICAgICAgICAibGliZ3VpIiwKKyAgICAgICAgImxpYmN1dGlscyIsCisgICAgXSwKKworICAgIGNmbGFnczogWworICAgICAgICAiLVduby1tdWx0aWNoYXIiLAorICAgIF0sCit9CisKK2NjX2JpbmFyeSB7CisgICAgbmFtZTogIm1lZGlhZmlsdGVyIiwKKworICAgIHNyY3M6IFsKKyAgICAgICAgImZpbHRlcnMvYXJnYnRvcmdiYS5yc2NyaXB0IiwKKyAgICAgICAgImZpbHRlcnMvbmlnaHR2aXNpb24ucnNjcmlwdCIsCisgICAgICAgICJmaWx0ZXJzL3NhdHVyYXRpb24ucnNjcmlwdCIsCisgICAgICAgICJtZWRpYWZpbHRlci5jcHAiLAorICAgIF0sCisKKyAgICBoZWFkZXJfbGliczogWworICAgICAgICAibGlibWVkaWFkcm1faGVhZGVycyIsCisgICAgICAgICJsaWJtZWRpYW1ldHJpY3NfaGVhZGVycyIsCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9oZWFkZXJzIiwKKyAgICAgICAgInJzLWhlYWRlcnMiLAorICAgIF0sCisKKyAgICBpbmNsdWRlX2RpcnM6IFsiZnJhbWV3b3Jrcy9hdi9tZWRpYS9saWJzdGFnZWZyaWdodCJdLAorCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0IiwKKyAgICAgICAgImxpYmxvZyIsCisgICAgICAgICJsaWJ1dGlscyIsCisgICAgICAgICJsaWJiaW5kZXIiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiIsCisgICAgICAgICJsaWJtZWRpYV9vbXgiLAorICAgICAgICAibGlidWkiLAorICAgICAgICAibGliZ3VpIiwKKyAgICAgICAgImxpYlJTY3BwIiwKKyAgICBdLAorCisgICAgc3RhdGljX2xpYnM6IFsibGlic3RhZ2VmcmlnaHRfbWVkaWFmaWx0ZXIiXSwKKworICAgIGNmbGFnczogWworICAgICAgICAiLVduby1tdWx0aWNoYXIiLAorICAgIF0sCisKKyAgICBzYW5pdGl6ZTogeworICAgICAgICBjZmk6IHRydWUsCisgICAgfSwKK30KKworY2NfYmluYXJ5IHsKKyAgICBuYW1lOiAibXV4ZXIiLAorCisgICAgc3JjczogWyJtdXhlci5jcHAiXSwKKworICAgIGhlYWRlcl9saWJzOiBbCisgICAgICAgICJsaWJtZWRpYW1ldHJpY3NfaGVhZGVycyIsCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9oZWFkZXJzIiwKKyAgICBdLAorCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0IiwKKyAgICAgICAgImxpYmxvZyIsCisgICAgICAgICJsaWJ1dGlscyIsCisgICAgICAgICJsaWJiaW5kZXIiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiIsCisgICAgICAgICJsaWJjdXRpbHMiLAorICAgICAgICAibGliYyIsCisgICAgXSwKKworICAgIGNmbGFnczogWworICAgICAgICAiLVduby1tdWx0aWNoYXIiLAorICAgIF0sCit9CmRpZmYgLS1naXQgYS9jbWRzL3N0YWdlZnJpZ2h0L0FuZHJvaWQubWsgYi9jbWRzL3N0YWdlZnJpZ2h0L0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwM2M0YTQuLjAwMDAwMDAKLS0tIGEvY21kcy9zdGFnZWZyaWdodC9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMjc2ICswLDAgQEAKLUxPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQotCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfU1JDX0ZJTEVTOj0gICAgICAgXAotICAgICAgICBBdWRpb1BsYXllci5jcHAgXAotICAgICAgICBzdGFnZWZyaWdodC5jcHAgXAotICAgICAgICBqcGVnLmNwcCAgICAgICAgXAotICAgICAgICBTaW5lU291cmNlLmNwcAotCi1MT0NBTF9IRUFERVJfTElCUkFSSUVTIDo9IFwKLSAgICAgICAgbGlibWVkaWFtZXRyaWNzX2hlYWRlcnMgXAotCi1MT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IFwKLSAgICAgICAgbGlic3RhZ2VmcmlnaHQgbGlibWVkaWEgbGlibWVkaWFfY29kZWNsaXN0IGxpYnV0aWxzIGxpYmJpbmRlciBcCi0gICAgICAgIGxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24gbGlianBlZyBsaWJ1aSBsaWJndWkgbGliY3V0aWxzIGxpYmxvZyBcCi0gICAgICAgIGxpYmhpZGxiYXNlIGxpYmRhdGFzb3VyY2UgbGliYXVkaW9jbGllbnQgXAotICAgICAgICBhbmRyb2lkLmhhcmR3YXJlLm1lZGlhLm9teEAxLjAgXAotICAgICAgICBmcmFtZXdvcmstcGVybWlzc2lvbi1haWRsLWNwcAotCi1MT0NBTF9TVEFUSUNfTElCUkFSSUVTIDo9IGZyYW1ld29yay1wZXJtaXNzaW9uLWFpZGwtY3BwCi0KLUxPQ0FMX0NfSU5DTFVERVM6PSBcCi0gICAgICAgIGZyYW1ld29ya3MvYXYvbWVkaWEvbGlic3RhZ2VmcmlnaHQgXAotICAgICAgICBmcmFtZXdvcmtzL2F2L21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUgXAotICAgICAgICBmcmFtZXdvcmtzL25hdGl2ZS9pbmNsdWRlL21lZGlhL29wZW5tYXggXAotCi1MT0NBTF9DRkxBR1MgKz0gLVduby1tdWx0aWNoYXIgLVdlcnJvciAtV2FsbAotCi1MT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAotCi1MT0NBTF9TWVNURU1fRVhUX01PRFVMRTo9IHRydWUKLUxPQ0FMX01PRFVMRTo9IHN0YWdlZnJpZ2h0Ci1MT0NBTF9MSUNFTlNFX0tJTkRTOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRTo9ICQoTE9DQUxfUEFUSCkvTk9USUNFCi0KLWluY2x1ZGUgJChCVUlMRF9FWEVDVVRBQkxFKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfU1JDX0ZJTEVTOj0gICAgICAgICBcCi0gICAgICAgIEF1ZGlvUGxheWVyLmNwcCBcCi0gICAgICAgIFNpbmVTb3VyY2UuY3BwICAgIFwKLSAgICAgICAgcmVjb3JkLmNwcAotCi1MT0NBTF9IRUFERVJfTElCUkFSSUVTIDo9IFwKLSAgICAgICAgbGlibWVkaWFtZXRyaWNzX2hlYWRlcnMgXAotCi1MT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IFwKLSAgICAgICAgbGlic3RhZ2VmcmlnaHQgbGlibWVkaWEgbGlibG9nIGxpYnV0aWxzIGxpYmJpbmRlciBcCi0gICAgICAgIGxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24gbGliZGF0YXNvdXJjZSBsaWJhdWRpb2NsaWVudCBcCi0gICAgICAgIGZyYW1ld29yay1wZXJtaXNzaW9uLWFpZGwtY3BwCi0KLUxPQ0FMX0NfSU5DTFVERVM6PSBcCi0gICAgICAgIGZyYW1ld29ya3MvYXYvY2FtZXJhL2luY2x1ZGUgXAotICAgICAgICBmcmFtZXdvcmtzL2F2L21lZGlhL2xpYnN0YWdlZnJpZ2h0IFwKLSAgICAgICAgZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZS9tZWRpYS9vcGVubWF4IFwKLSAgICAgICAgZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZS9tZWRpYS9oYXJkd2FyZQotCi1MT0NBTF9DRkxBR1MgKz0gLVduby1tdWx0aWNoYXIgLVdlcnJvciAtV2FsbAotCi1MT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAotCi1MT0NBTF9NT0RVTEU6PSByZWNvcmQKLUxPQ0FMX0xJQ0VOU0VfS0lORFM6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlM6PSBub3RpY2UKLUxPQ0FMX05PVElDRV9GSUxFOj0gJChMT0NBTF9QQVRIKS9OT1RJQ0UKLQotaW5jbHVkZSAkKEJVSUxEX0VYRUNVVEFCTEUpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9TUkNfRklMRVM6PSAgICAgICAgIFwKLSAgICAgICAgQXVkaW9QbGF5ZXIuY3BwIFwKLSAgICAgICAgcmVjb3JkdmlkZW8uY3BwCi0KLUxPQ0FMX0hFQURFUl9MSUJSQVJJRVMgOj0gXAotICAgICAgICBsaWJtZWRpYW1ldHJpY3NfaGVhZGVycyBcCi0KLUxPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAotICAgICAgICBsaWJzdGFnZWZyaWdodCBsaWJtZWRpYSBsaWJsb2cgbGlidXRpbHMgbGliYmluZGVyIFwKLSAgICAgICAgbGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiBsaWJhdWRpb2NsaWVudAotCi1MT0NBTF9DX0lOQ0xVREVTOj0gXAotICAgICAgICBmcmFtZXdvcmtzL2F2L21lZGlhL2xpYnN0YWdlZnJpZ2h0IFwKLSAgICAgICAgZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZS9tZWRpYS9vcGVubWF4IFwKLSAgICAgICAgZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZS9tZWRpYS9oYXJkd2FyZSBcCi0gICAgICAgIGZyYW1ld29yay1wZXJtaXNzaW9uLWFpZGwtY3BwCi0KLUxPQ0FMX0NGTEFHUyArPSAtV25vLW11bHRpY2hhciAtV2Vycm9yIC1XYWxsCi0KLUxPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCi0KLUxPQ0FMX01PRFVMRTo9IHJlY29yZHZpZGVvCi1MT0NBTF9MSUNFTlNFX0tJTkRTOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRTo9ICQoTE9DQUxfUEFUSCkvTk9USUNFCi0KLWluY2x1ZGUgJChCVUlMRF9FWEVDVVRBQkxFKQotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9TUkNfRklMRVM6PSAgICAgICAgIFwKLSAgICAgICAgQXVkaW9QbGF5ZXIuY3BwIFwKLSAgICAgICAgU2luZVNvdXJjZS5jcHAgICAgXAotICAgICAgICBhdWRpb2xvb3AuY3BwCi0KLUxPQ0FMX0hFQURFUl9MSUJSQVJJRVMgOj0gXAotICAgICAgICBsaWJtZWRpYW1ldHJpY3NfaGVhZGVycyBcCi0KLUxPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAotICAgICAgICBsaWJzdGFnZWZyaWdodCBsaWJtZWRpYSBsaWJsb2cgbGlidXRpbHMgbGliYmluZGVyIFwKLSAgICAgICAgbGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiBsaWJhdWRpb2NsaWVudCBcCi0gICAgICAgIGZyYW1ld29yay1wZXJtaXNzaW9uLWFpZGwtY3BwCi0KLUxPQ0FMX0NfSU5DTFVERVM6PSBcCi0gICAgICAgIGZyYW1ld29ya3MvYXYvbWVkaWEvbGlic3RhZ2VmcmlnaHQgXAotICAgICAgICBmcmFtZXdvcmtzL25hdGl2ZS9pbmNsdWRlL21lZGlhL29wZW5tYXgKLQotTE9DQUxfQ0ZMQUdTICs9IC1Xbm8tbXVsdGljaGFyIC1XZXJyb3IgLVdhbGwKLQotTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKLQotTE9DQUxfTU9EVUxFOj0gYXVkaW9sb29wCi1MT0NBTF9MSUNFTlNFX0tJTkRTOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRTo9ICQoTE9DQUxfUEFUSCkvTk9USUNFCi0KLWluY2x1ZGUgJChCVUlMRF9FWEVDVVRBQkxFKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfU1JDX0ZJTEVTOj0gICAgICAgICBcCi0gICAgICAgIHN0cmVhbS5jcHAgICAgXAotCi1MT0NBTF9IRUFERVJfTElCUkFSSUVTIDo9IFwKLSAgICAgICAgbGlibWVkaWFtZXRyaWNzX2hlYWRlcnMgXAotCi1MT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IFwKLSAgICAgICAgbGlic3RhZ2VmcmlnaHQgbGlibG9nIGxpYnV0aWxzIGxpYmJpbmRlciBsaWJ1aSBsaWJndWkgXAotICAgICAgICBsaWJzdGFnZWZyaWdodF9mb3VuZGF0aW9uIGxpYm1lZGlhIGxpYmN1dGlscyBsaWJkYXRhc291cmNlCi0KLUxPQ0FMX0NfSU5DTFVERVM6PSBcCi0gICAgICAgIGZyYW1ld29ya3MvYXYvbWVkaWEvbGlic3RhZ2VmcmlnaHQgXAotICAgICAgICBmcmFtZXdvcmtzL25hdGl2ZS9pbmNsdWRlL21lZGlhL29wZW5tYXgKLQotTE9DQUxfQ0ZMQUdTICs9IC1Xbm8tbXVsdGljaGFyIC1XZXJyb3IgLVdhbGwKLQotTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKLQotTE9DQUxfTU9EVUxFOj0gc3RyZWFtCi1MT0NBTF9MSUNFTlNFX0tJTkRTOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRTo9ICQoTE9DQUxfUEFUSCkvTk9USUNFCi0KLWluY2x1ZGUgJChCVUlMRF9FWEVDVVRBQkxFKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfU1JDX0ZJTEVTOj0gICAgICAgICAgICAgICBcCi0gICAgICAgIGNvZGVjLmNwcCAgICAgICAgICAgICAgIFwKLSAgICAgICAgU2ltcGxlUGxheWVyLmNwcCAgICAgICAgXAotCi1MT0NBTF9IRUFERVJfTElCUkFSSUVTIDo9IFwKLSAgICAgICAgbGlibWVkaWFkcm1faGVhZGVycyBcCi0gICAgICAgIGxpYm1lZGlhbWV0cmljc19oZWFkZXJzIFwKLQotTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBcCi0gICAgICAgIGxpYnN0YWdlZnJpZ2h0IGxpYmxvZyBsaWJ1dGlscyBsaWJiaW5kZXIgbGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiBcCi0gICAgICAgIGxpYm1lZGlhIGxpYm1lZGlhX29teCBsaWJhdWRpb2NsaWVudCBsaWJ1aSBsaWJndWkgbGliY3V0aWxzCi0KLUxPQ0FMX0NfSU5DTFVERVM6PSBcCi0gICAgICAgIGZyYW1ld29ya3MvYXYvbWVkaWEvbGlic3RhZ2VmcmlnaHQgXAotICAgICAgICBmcmFtZXdvcmtzL25hdGl2ZS9pbmNsdWRlL21lZGlhL29wZW5tYXgKLQotTE9DQUxfQ0ZMQUdTICs9IC1Xbm8tbXVsdGljaGFyIC1XZXJyb3IgLVdhbGwKLQotTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKLQotTE9DQUxfTU9EVUxFOj0gY29kZWMKLUxPQ0FMX0xJQ0VOU0VfS0lORFM6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlM6PSBub3RpY2UKLUxPQ0FMX05PVElDRV9GSUxFOj0gJChMT0NBTF9QQVRIKS9OT1RJQ0UKLQotaW5jbHVkZSAkKEJVSUxEX0VYRUNVVEFCTEUpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9TUkNfRklMRVM6PSBcCi0gICAgICAgIGZpbHRlcnMvYXJnYnRvcmdiYS5yc2NyaXB0IFwKLSAgICAgICAgZmlsdGVycy9uaWdodHZpc2lvbi5yc2NyaXB0IFwKLSAgICAgICAgZmlsdGVycy9zYXR1cmF0aW9uLnJzY3JpcHQgXAotICAgICAgICBtZWRpYWZpbHRlci5jcHAgXAotCi1MT0NBTF9IRUFERVJfTElCUkFSSUVTIDo9IFwKLSAgICAgICAgbGlibWVkaWFkcm1faGVhZGVycyBcCi0gICAgICAgIGxpYm1lZGlhbWV0cmljc19oZWFkZXJzIFwKLQotTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBcCi0gICAgICAgIGxpYnN0YWdlZnJpZ2h0IFwKLSAgICAgICAgbGlibG9nIFwKLSAgICAgICAgbGlidXRpbHMgXAotICAgICAgICBsaWJiaW5kZXIgXAotICAgICAgICBsaWJzdGFnZWZyaWdodF9mb3VuZGF0aW9uIFwKLSAgICAgICAgbGlibWVkaWFfb214IFwKLSAgICAgICAgbGlidWkgXAotICAgICAgICBsaWJndWkgXAotICAgICAgICBsaWJSU2NwcCBcCi0KLUxPQ0FMX0NfSU5DTFVERVM6PSBcCi0gICAgICAgIGZyYW1ld29ya3MvYXYvbWVkaWEvbGlic3RhZ2VmcmlnaHQgXAotICAgICAgICBmcmFtZXdvcmtzL25hdGl2ZS9pbmNsdWRlL21lZGlhL29wZW5tYXggXAotICAgICAgICBmcmFtZXdvcmtzL3JzL2NwcCBcCi0gICAgICAgIGZyYW1ld29ya3MvcnMgXAotCi1pbnRlcm1lZGlhdGVzIDo9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsU1RBVElDX0xJQlJBUklFUyxsaWJSUyxUQVJHRVQsKQotTE9DQUxfQ19JTkNMVURFUyArPSAkKGludGVybWVkaWF0ZXMpCi0KLUxPQ0FMX1NUQVRJQ19MSUJSQVJJRVM6PSBcCi0gICAgICAgIGxpYnN0YWdlZnJpZ2h0X21lZGlhZmlsdGVyCi0KLUxPQ0FMX0NGTEFHUyArPSAtV25vLW11bHRpY2hhciAtV2Vycm9yIC1XYWxsCi0KLUxPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCi0KLUxPQ0FMX01PRFVMRTo9IG1lZGlhZmlsdGVyCi1MT0NBTF9MSUNFTlNFX0tJTkRTOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRTo9ICQoTE9DQUxfUEFUSCkvTk9USUNFCi0KLUxPQ0FMX1NBTklUSVpFIDo9IGNmaQotCi1pbmNsdWRlICQoQlVJTERfRVhFQ1VUQUJMRSkKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX1NSQ19GSUxFUzo9ICAgICAgICAgICAgICAgXAotICAgICAgICBtdXhlci5jcHAgICAgICAgICAgICBcCi0KLUxPQ0FMX0hFQURFUl9MSUJSQVJJRVMgOj0gXAotICAgICAgICBsaWJtZWRpYW1ldHJpY3NfaGVhZGVycyBcCi0KLUxPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAotICAgICAgICBsaWJzdGFnZWZyaWdodCBsaWJsb2cgbGlidXRpbHMgbGliYmluZGVyIGxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24gXAotICAgICAgICBsaWJjdXRpbHMgbGliYwotCi1MT0NBTF9DX0lOQ0xVREVTOj0gXAotICAgICAgICBmcmFtZXdvcmtzL2F2L21lZGlhL2xpYnN0YWdlZnJpZ2h0IFwKLSAgICAgICAgZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZS9tZWRpYS9vcGVubWF4Ci0KLUxPQ0FMX0NGTEFHUyArPSAtV25vLW11bHRpY2hhciAtV2Vycm9yIC1XYWxsCi0KLUxPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCi0KLUxPQ0FMX01PRFVMRTo9IG11eGVyCi1MT0NBTF9MSUNFTlNFX0tJTkRTOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRTo9ICQoTE9DQUxfUEFUSCkvTk9USUNFCi0KLWluY2x1ZGUgJChCVUlMRF9FWEVDVVRBQkxFKQpkaWZmIC0tZ2l0IGEvZHJtL2RybXNlcnZlci9kcm1zZXJ2ZXIucmMgYi9kcm0vZHJtc2VydmVyL2RybXNlcnZlci5yYwppbmRleCBlYjE3NmMxLi4wMzE5ZmY5IDEwMDY0NAotLS0gYS9kcm0vZHJtc2VydmVyL2RybXNlcnZlci5yYworKysgYi9kcm0vZHJtc2VydmVyL2RybXNlcnZlci5yYwpAQCAtMyw3ICszLDcgQEAKICAgICBjbGFzcyBtYWluCiAgICAgdXNlciBkcm0KICAgICBncm91cCBkcm0gc3lzdGVtIGluZXQgZHJtcnBjIHJlYWRwcm9jCi0gICAgd3JpdGVwaWQgL2Rldi9jcHVzZXQvZm9yZWdyb3VuZC90YXNrcworICAgIHRhc2tfcHJvZmlsZXMgUHJvY2Vzc0NhcGFjaXR5SGlnaAogCiBvbiBwcm9wZXJ0eTpkcm0uc2VydmljZS5lbmFibGVkPXRydWUKICAgICBzdGFydCBkcm0KZGlmZiAtLWdpdCBhL2RybS9saWJtZWRpYWRybS9BbmRyb2lkLmJwIGIvZHJtL2xpYm1lZGlhZHJtL0FuZHJvaWQuYnAKaW5kZXggMGZmZTYyNi4uNzFkZjU4YyAxMDA2NDQKLS0tIGEvZHJtL2xpYm1lZGlhZHJtL0FuZHJvaWQuYnAKKysrIGIvZHJtL2xpYm1lZGlhZHJtL0FuZHJvaWQuYnAKQEAgLTY2LDcgKzY2LDcgQEAKICAgICBdLAogCiAgICAgc3RhdGljX2xpYnM6IFsKLSAgICAgICAgInJlc291cmNlbWFuYWdlcl9haWRsX2ludGVyZmFjZS1uZGtfcGxhdGZvcm0iLAorICAgICAgICAicmVzb3VyY2VtYW5hZ2VyX2FpZGxfaW50ZXJmYWNlLW5kayIsCiAgICAgXSwKIAogICAgIGV4cG9ydF9zaGFyZWRfbGliX2hlYWRlcnM6IFsKZGlmZiAtLWdpdCBhL2RybS9saWJtZWRpYWRybS9mdXp6ZXIvQW5kcm9pZC5icCBiL2RybS9saWJtZWRpYWRybS9mdXp6ZXIvQW5kcm9pZC5icAppbmRleCA3MjgxMDY2Li40OWJiYWQ0IDEwMDY0NAotLS0gYS9kcm0vbGlibWVkaWFkcm0vZnV6emVyL0FuZHJvaWQuYnAKKysrIGIvZHJtL2xpYm1lZGlhZHJtL2Z1enplci9BbmRyb2lkLmJwCkBAIC0zNSw3ICszNSw3IEBACiAgICAgc3RhdGljX2xpYnM6IFsKICAgICAgICAgImxpYm1lZGlhZHJtIiwKICAgICAgICAgImxpYmxvZyIsCi0gICAgICAgICJyZXNvdXJjZW1hbmFnZXJfYWlkbF9pbnRlcmZhY2UtbmRrX3BsYXRmb3JtIiwKKyAgICAgICAgInJlc291cmNlbWFuYWdlcl9haWRsX2ludGVyZmFjZS1uZGsiLAogICAgIF0sCiAgICAgaGVhZGVyX2xpYnM6IFsKICAgICAgICAgImxpYm1lZGlhX2hlYWRlcnMiLApkaWZmIC0tZ2l0IGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9hbmRyb2lkLmhhcmR3YXJlLmRybUAxLjItc2VydmljZS1sYXp5LmNsZWFya2V5LnJjIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9hbmRyb2lkLmhhcmR3YXJlLmRybUAxLjItc2VydmljZS1sYXp5LmNsZWFya2V5LnJjCmluZGV4IDlhZmQzZDcuLmVjNDUxN2QgMTAwNjQ0Ci0tLSBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvYW5kcm9pZC5oYXJkd2FyZS5kcm1AMS4yLXNlcnZpY2UtbGF6eS5jbGVhcmtleS5yYworKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2FuZHJvaWQuaGFyZHdhcmUuZHJtQDEuMi1zZXJ2aWNlLWxhenkuY2xlYXJrZXkucmMKQEAgLTExLDQgKzExLDQgQEAKICAgICB1c2VyIG1lZGlhCiAgICAgZ3JvdXAgbWVkaWEgbWVkaWFkcm0KICAgICBpb3ByaW8gcnQgNAotICAgIHdyaXRlcGlkIC9kZXYvY3B1c2V0L2ZvcmVncm91bmQvdGFza3MKKyAgICB0YXNrX3Byb2ZpbGVzIFByb2Nlc3NDYXBhY2l0eUhpZ2gKZGlmZiAtLWdpdCBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvYW5kcm9pZC5oYXJkd2FyZS5kcm1AMS4yLXNlcnZpY2UuY2xlYXJrZXkucmMgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2FuZHJvaWQuaGFyZHdhcmUuZHJtQDEuMi1zZXJ2aWNlLmNsZWFya2V5LnJjCmluZGV4IGMxYWJlN2YuLjNiNDhjZjIgMTAwNjQ0Ci0tLSBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvYW5kcm9pZC5oYXJkd2FyZS5kcm1AMS4yLXNlcnZpY2UuY2xlYXJrZXkucmMKKysrIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9hbmRyb2lkLmhhcmR3YXJlLmRybUAxLjItc2VydmljZS5jbGVhcmtleS5yYwpAQCAtMTAsNCArMTAsNCBAQAogICAgIHVzZXIgbWVkaWEKICAgICBncm91cCBtZWRpYSBtZWRpYWRybQogICAgIGlvcHJpbyBydCA0Ci0gICAgd3JpdGVwaWQgL2Rldi9jcHVzZXQvZm9yZWdyb3VuZC90YXNrcworICAgIHRhc2tfcHJvZmlsZXMgUHJvY2Vzc0NhcGFjaXR5SGlnaApkaWZmIC0tZ2l0IGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9hbmRyb2lkLmhhcmR3YXJlLmRybUAxLjMtc2VydmljZS1sYXp5LmNsZWFya2V5LnJjIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9hbmRyb2lkLmhhcmR3YXJlLmRybUAxLjMtc2VydmljZS1sYXp5LmNsZWFya2V5LnJjCmluZGV4IDFlMGQ0MzEuLjZlNjQ5NzggMTAwNjQ0Ci0tLSBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvYW5kcm9pZC5oYXJkd2FyZS5kcm1AMS4zLXNlcnZpY2UtbGF6eS5jbGVhcmtleS5yYworKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2FuZHJvaWQuaGFyZHdhcmUuZHJtQDEuMy1zZXJ2aWNlLWxhenkuY2xlYXJrZXkucmMKQEAgLTEzLDQgKzEzLDQgQEAKICAgICB1c2VyIG1lZGlhCiAgICAgZ3JvdXAgbWVkaWEgbWVkaWFkcm0KICAgICBpb3ByaW8gcnQgNAotICAgIHdyaXRlcGlkIC9kZXYvY3B1c2V0L2ZvcmVncm91bmQvdGFza3MKKyAgICB0YXNrX3Byb2ZpbGVzIFByb2Nlc3NDYXBhY2l0eUhpZ2gKZGlmZiAtLWdpdCBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvYW5kcm9pZC5oYXJkd2FyZS5kcm1AMS4zLXNlcnZpY2UuY2xlYXJrZXkucmMgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2FuZHJvaWQuaGFyZHdhcmUuZHJtQDEuMy1zZXJ2aWNlLmNsZWFya2V5LnJjCmluZGV4IDgxMzA1MTEuLmUzMDJlMWIgMTAwNjQ0Ci0tLSBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvYW5kcm9pZC5oYXJkd2FyZS5kcm1AMS4zLXNlcnZpY2UuY2xlYXJrZXkucmMKKysrIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9hbmRyb2lkLmhhcmR3YXJlLmRybUAxLjMtc2VydmljZS5jbGVhcmtleS5yYwpAQCAtMTEsNCArMTEsNCBAQAogICAgIHVzZXIgbWVkaWEKICAgICBncm91cCBtZWRpYSBtZWRpYWRybQogICAgIGlvcHJpbyBydCA0Ci0gICAgd3JpdGVwaWQgL2Rldi9jcHVzZXQvZm9yZWdyb3VuZC90YXNrcworICAgIHRhc2tfcHJvZmlsZXMgUHJvY2Vzc0NhcGFjaXR5SGlnaApkaWZmIC0tZ2l0IGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9hbmRyb2lkLmhhcmR3YXJlLmRybUAxLjQtc2VydmljZS1sYXp5LmNsZWFya2V5LnJjIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9hbmRyb2lkLmhhcmR3YXJlLmRybUAxLjQtc2VydmljZS1sYXp5LmNsZWFya2V5LnJjCmluZGV4IDQ2YWJhODguLjg0YTYzYTEgMTAwNjQ0Ci0tLSBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvYW5kcm9pZC5oYXJkd2FyZS5kcm1AMS40LXNlcnZpY2UtbGF6eS5jbGVhcmtleS5yYworKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2FuZHJvaWQuaGFyZHdhcmUuZHJtQDEuNC1zZXJ2aWNlLWxhenkuY2xlYXJrZXkucmMKQEAgLTE1LDQgKzE1LDQgQEAKICAgICB1c2VyIG1lZGlhCiAgICAgZ3JvdXAgbWVkaWEgbWVkaWFkcm0KICAgICBpb3ByaW8gcnQgNAotICAgIHdyaXRlcGlkIC9kZXYvY3B1c2V0L2ZvcmVncm91bmQvdGFza3MKKyAgICB0YXNrX3Byb2ZpbGVzIFByb2Nlc3NDYXBhY2l0eUhpZ2gKZGlmZiAtLWdpdCBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvYW5kcm9pZC5oYXJkd2FyZS5kcm1AMS40LXNlcnZpY2UuY2xlYXJrZXkucmMgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9oaWRsL2FuZHJvaWQuaGFyZHdhcmUuZHJtQDEuNC1zZXJ2aWNlLmNsZWFya2V5LnJjCmluZGV4IDgxODY5MzMuLjY0OTU5OWUgMTAwNjQ0Ci0tLSBhL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L2hpZGwvYW5kcm9pZC5oYXJkd2FyZS5kcm1AMS40LXNlcnZpY2UuY2xlYXJrZXkucmMKKysrIGIvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvaGlkbC9hbmRyb2lkLmhhcmR3YXJlLmRybUAxLjQtc2VydmljZS5jbGVhcmtleS5yYwpAQCAtMTMsNCArMTMsNCBAQAogICAgIHVzZXIgbWVkaWEKICAgICBncm91cCBtZWRpYSBtZWRpYWRybQogICAgIGlvcHJpbyBydCA0Ci0gICAgd3JpdGVwaWQgL2Rldi9jcHVzZXQvZm9yZWdyb3VuZC90YXNrcworICAgIHRhc2tfcHJvZmlsZXMgUHJvY2Vzc0NhcGFjaXR5SGlnaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9PV05FUlMgYi9pbmNsdWRlL09XTkVSUwppbmRleCBkNmJkOTk4Li44OGRlNTk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL09XTkVSUworKysgYi9pbmNsdWRlL09XTkVSUwpAQCAtMSw2ICsxLDUgQEAKIGVsYXVyZW50QGdvb2dsZS5jb20KLWdrYXN0ZW5AZ29vZ2xlLmNvbQogaHVuZ2FAZ29vZ2xlLmNvbQoganRpbmtlckBnb29nbGUuY29tCiBsYWpvc0Bnb29nbGUuY29tCi1tYXJjb25lQGdvb2dsZS5jb20KK2Vzc2lja0Bnb29nbGUuY29tCmRpZmYgLS1naXQgYS9tZWRpYS9PV05FUlMgYi9tZWRpYS9PV05FUlMKaW5kZXggNGNmNDg3MC4uMDk5NzI5ZiAxMDA2NDQKLS0tIGEvbWVkaWEvT1dORVJTCisrKyBiL21lZGlhL09XTkVSUwpAQCAtMTUsNiArMTUsNyBAQAogcm9iZXJ0c2hpaEBnb29nbGUuY29tCiB0YWtsZWVAZ29vZ2xlLmNvbQogd29uc2lrQGdvb2dsZS5jb20KK3l0YWlAZ29vZ2xlLmNvbQogCiAjIGdvL2FuZHJvaWQtZndrLW1lZGlhLXNvbHV0aW9ucyBmb3IgaW5mbyBvbiBhcmVhcyBvZiBvd25lcnNoaXAuCiBpbmNsdWRlIHBsYXRmb3JtL2ZyYW1ld29ya3MvYXY6L21lZGlhL2phbml0b3JzL21lZGlhX3NvbHV0aW9uc19PV05FUlMKZGlmZiAtLWdpdCBhL21lZGlhL2F1ZGlvc2VydmVyL0FuZHJvaWQuYnAgYi9tZWRpYS9hdWRpb3NlcnZlci9BbmRyb2lkLmJwCmluZGV4IGJlMjVmZmIuLmU1Zjk5MDcgMTAwNjQ0Ci0tLSBhL21lZGlhL2F1ZGlvc2VydmVyL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvYXVkaW9zZXJ2ZXIvQW5kcm9pZC5icApAQCAtMjUsNiArMjUsNyBAQAogICAgIF0sCiAKICAgICBzaGFyZWRfbGliczogWworICAgICAgICAicGFja2FnZW1hbmFnZXJfYWlkbC1jcHAiLAogICAgICAgICAibGliYWF1ZGlvc2VydmljZSIsCiAgICAgICAgICJsaWJhdWRpb2ZsaW5nZXIiLAogICAgICAgICAibGliYXVkaW9wb2xpY3lzZXJ2aWNlIiwKQEAgLTQxLDcgKzQyLDYgQEAKICAgICAgICAgImxpYnBvd2VybWFuYWdlciIsCiAgICAgICAgICJsaWJ1dGlscyIsCiAgICAgICAgICJsaWJ2aWJyYXRvciIsCi0KICAgICBdLAogCiAgICAgLy8gVE9ETyBjaGVjayBpZiB3ZSBzdGlsbCBuZWVkIGFsbCBvZiB0aGVzZSBpbmNsdWRlIGRpcmVjdG9yaWVzCmRpZmYgLS1naXQgYS9tZWRpYS9hdWRpb3NlcnZlci9tYWluX2F1ZGlvc2VydmVyLmNwcCBiL21lZGlhL2F1ZGlvc2VydmVyL21haW5fYXVkaW9zZXJ2ZXIuY3BwCmluZGV4IDhlZTFlZmIuLmM1YWM3ZjkgMTAwNjQ0Ci0tLSBhL21lZGlhL2F1ZGlvc2VydmVyL21haW5fYXVkaW9zZXJ2ZXIuY3BwCisrKyBiL21lZGlhL2F1ZGlvc2VydmVyL21haW5fYXVkaW9zZXJ2ZXIuY3BwCkBAIC03MywxMCArNzMsOCBAQAogICAgICAgICBJUENUaHJlYWRTdGF0ZTo6c2VsZigpLT5qb2luVGhyZWFkUG9vbCgpOwogICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICBzaWdpbmZvX3QgaW5mbzsKLSAgICAgICAgICAgIGludCByZXQgPSB3YWl0aWQoUF9QSUQsIGNoaWxkUGlkLCAmaW5mbywgV0VYSVRFRCB8IFdTVE9QUEVEIHwgV0NPTlRJTlVFRCk7Ci0gICAgICAgICAgICBpZiAocmV0ID09IEVJTlRSKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgcmV0ID0gVEVNUF9GQUlMVVJFX1JFVFJZKHdhaXRpZChQX1BJRCwgY2hpbGRQaWQsICZpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VYSVRFRCB8IFdTVE9QUEVEIHwgV0NPTlRJTlVFRCkpOwogICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9URVNUX01BUFBJTkcgYi9tZWRpYS9jb2RlYzIvVEVTVF9NQVBQSU5HCmluZGV4IDZhYzQyMTAuLmM2NzI4YzggMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9URVNUX01BUFBJTkcKKysrIGIvbWVkaWEvY29kZWMyL1RFU1RfTUFQUElORwpAQCAtMTUsMTMgKzE1LDM1IEBACiAgICAgICAgIH0sCiAgICAgICAgIHsKICAgICAgICAgICAiZXhjbHVkZS1hbm5vdGF0aW9uIjogImFuZHJvaWQucGxhdGZvcm0udGVzdC5hbm5vdGF0aW9ucy5SZXF1aXJlc0RldmljZSIKKyAgICAgICAgfQorICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiQ3RzTWVkaWFBdWRpb1Rlc3RDYXNlcyIsCisgICAgICAib3B0aW9ucyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJpbmNsdWRlLWFubm90YXRpb24iOiAiYW5kcm9pZC5wbGF0Zm9ybS50ZXN0LmFubm90YXRpb25zLlByZXN1Ym1pdCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJleGNsdWRlLWFubm90YXRpb24iOiAiYW5kcm9pZC5wbGF0Zm9ybS50ZXN0LmFubm90YXRpb25zLlJlcXVpcmVzRGV2aWNlIgogICAgICAgICB9LAogICAgICAgICAvLyBUT0RPOiBiLzE0OTMxNDQxOQogICAgICAgICB7Ci0gICAgICAgICAgImV4Y2x1ZGUtZmlsdGVyIjogImFuZHJvaWQubWVkaWEuY3RzLkF1ZGlvUGxheWJhY2tDYXB0dXJlVGVzdCIKKyAgICAgICAgICAiZXhjbHVkZS1maWx0ZXIiOiAiYW5kcm9pZC5tZWRpYS5hdWRpby5jdHMuQXVkaW9QbGF5YmFja0NhcHR1cmVUZXN0IgogICAgICAgICB9LAogICAgICAgICB7Ci0gICAgICAgICAgImV4Y2x1ZGUtZmlsdGVyIjogImFuZHJvaWQubWVkaWEuY3RzLkF1ZGlvUmVjb3JkVGVzdCIKKyAgICAgICAgICAiZXhjbHVkZS1maWx0ZXIiOiAiYW5kcm9pZC5tZWRpYS5hdWRpby5jdHMuQXVkaW9SZWNvcmRUZXN0IgorICAgICAgICB9CisgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJDdHNNZWRpYVBsYXllclRlc3RDYXNlcyIsCisgICAgICAib3B0aW9ucyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJpbmNsdWRlLWFubm90YXRpb24iOiAiYW5kcm9pZC5wbGF0Zm9ybS50ZXN0LmFubm90YXRpb25zLlByZXN1Ym1pdCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJleGNsdWRlLWFubm90YXRpb24iOiAiYW5kcm9pZC5wbGF0Zm9ybS50ZXN0LmFubm90YXRpb25zLlJlcXVpcmVzRGV2aWNlIgogICAgICAgICB9CiAgICAgICBdCiAgICAgfQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYXZjL0MyU29mdEF2Y0RlYy5jcHAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hdmMvQzJTb2Z0QXZjRGVjLmNwcAppbmRleCBlODI4N2Y5Li5jYzQ1MTdkIDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hdmMvQzJTb2Z0QXZjRGVjLmNwcAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hdmMvQzJTb2Z0QXZjRGVjLmNwcApAQCAtNTExLDcgKzUxMSw3IEBACiBzdGF0dXNfdCBDMlNvZnRBdmNEZWM6OmluaXREZWNvZGVyKCkgewogICAgIGlmIChPSyAhPSBjcmVhdGVEZWNvZGVyKCkpIHJldHVybiBVTktOT1dOX0VSUk9SOwogICAgIG1OdW1Db3JlcyA9IE1JTihnZXRDcHVDb3JlQ291bnQoKSwgTUFYX05VTV9DT1JFUyk7Ci0gICAgbVN0cmlkZSA9IEFMSUdOMzIobVdpZHRoKTsKKyAgICBtU3RyaWRlID0gQUxJR04xMjgobVdpZHRoKTsKICAgICBtU2lnbmFsbGVkRXJyb3IgPSBmYWxzZTsKICAgICByZXNldFBsdWdpbigpOwogICAgICh2b2lkKSBzZXROdW1Db3JlcygpOwpAQCAtNzc3LDIwICs3NzcsMjAgQEAKICAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKICAgICB9CiAgICAgaWYgKG1PdXRCbG9jayAmJgotICAgICAgICAgICAgKG1PdXRCbG9jay0+d2lkdGgoKSAhPSBBTElHTjMyKG1XaWR0aCkgfHwgbU91dEJsb2NrLT5oZWlnaHQoKSAhPSBtSGVpZ2h0KSkgeworICAgICAgICAgICAgKG1PdXRCbG9jay0+d2lkdGgoKSAhPSBBTElHTjEyOChtV2lkdGgpIHx8IG1PdXRCbG9jay0+aGVpZ2h0KCkgIT0gbUhlaWdodCkpIHsKICAgICAgICAgbU91dEJsb2NrLnJlc2V0KCk7CiAgICAgfQogICAgIGlmICghbU91dEJsb2NrKSB7CiAgICAgICAgIHVpbnQzMl90IGZvcm1hdCA9IEhBTF9QSVhFTF9GT1JNQVRfWVYxMjsKICAgICAgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSA9IHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSB9OwogICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPQotICAgICAgICAgICAgcG9vbC0+ZmV0Y2hHcmFwaGljQmxvY2soQUxJR04zMihtV2lkdGgpLCBtSGVpZ2h0LCBmb3JtYXQsIHVzYWdlLCAmbU91dEJsb2NrKTsKKyAgICAgICAgICAgIHBvb2wtPmZldGNoR3JhcGhpY0Jsb2NrKEFMSUdOMTI4KG1XaWR0aCksIG1IZWlnaHQsIGZvcm1hdCwgdXNhZ2UsICZtT3V0QmxvY2spOwogICAgICAgICBpZiAoZXJyICE9IEMyX09LKSB7CiAgICAgICAgICAgICBBTE9HRSgiZmV0Y2hHcmFwaGljQmxvY2sgZm9yIE91dHB1dCBmYWlsZWQgd2l0aCBzdGF0dXMgJWQiLCBlcnIpOwogICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgfQogICAgICAgICBBTE9HVigicHJvdmlkZWQgKCVkeCVkKSByZXF1aXJlZCAoJWR4JWQpIiwKLSAgICAgICAgICAgICAgbU91dEJsb2NrLT53aWR0aCgpLCBtT3V0QmxvY2stPmhlaWdodCgpLCBBTElHTjMyKG1XaWR0aCksIG1IZWlnaHQpOworICAgICAgICAgICAgICBtT3V0QmxvY2stPndpZHRoKCksIG1PdXRCbG9jay0+aGVpZ2h0KCksIEFMSUdOMTI4KG1XaWR0aCksIG1IZWlnaHQpOwogICAgIH0KIAogICAgIHJldHVybiBDMl9PSzsKQEAgLTkyOCw3ICs5MjgsNyBAQAogICAgICAgICBpZiAoMCA8IHBzX2RlY29kZV9vcC0+dTRfcGljX3dkICYmIDAgPCBwc19kZWNvZGVfb3AtPnU0X3BpY19odCkgewogICAgICAgICAgICAgaWYgKG1IZWFkZXJEZWNvZGVkID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgbUhlYWRlckRlY29kZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIG1TdHJpZGUgPSBBTElHTjMyKHBzX2RlY29kZV9vcC0+dTRfcGljX3dkKTsKKyAgICAgICAgICAgICAgICBtU3RyaWRlID0gQUxJR04xMjgocHNfZGVjb2RlX29wLT51NF9waWNfd2QpOwogICAgICAgICAgICAgICAgIHNldFBhcmFtcyhtU3RyaWRlLCBJVkRfREVDT0RFX0ZSQU1FKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChwc19kZWNvZGVfb3AtPnU0X3BpY193ZCAhPSBtV2lkdGggfHwgcHNfZGVjb2RlX29wLT51NF9waWNfaHQgIT0gbUhlaWdodCkgewpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYXZjL0MyU29mdEF2Y0RlYy5oIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvYXZjL0MyU29mdEF2Y0RlYy5oCmluZGV4IDVjMDdkMjkuLjU5ZDUxODQgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2F2Yy9DMlNvZnRBdmNEZWMuaAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9hdmMvQzJTb2Z0QXZjRGVjLmgKQEAgLTM4LDcgKzM4LDcgQEAKICNkZWZpbmUgaXZkZXh0X2N0bF9zZXRfbnVtX2NvcmVzX29wX3QgICBpaDI2NGRfY3RsX3NldF9udW1fY29yZXNfb3BfdAogI2RlZmluZSBpdmRleHRfY3RsX2dldF92dWlfcGFyYW1zX2lwX3QgIGloMjY0ZF9jdGxfZ2V0X3Z1aV9wYXJhbXNfaXBfdAogI2RlZmluZSBpdmRleHRfY3RsX2dldF92dWlfcGFyYW1zX29wX3QgIGloMjY0ZF9jdGxfZ2V0X3Z1aV9wYXJhbXNfb3BfdAotI2RlZmluZSBBTElHTjMyKHgpICAgICAgICAgICAgICAgICAgICAgICgoKCh4KSArIDMxKSA+PiA1KSA8PCA1KQorI2RlZmluZSBBTElHTjEyOCh4KSAgICAgICAgICAgICAgICAgICAgICgoKCh4KSArIDEyNykgPj4gNykgPDwgNykKICNkZWZpbmUgTUFYX05VTV9DT1JFUyAgICAgICAgICAgICAgICAgICA0CiAjZGVmaW5lIElWREVYVF9DTURfQ1RMX1NFVF9OVU1fQ09SRVMgICAgXAogICAgICAgICAoSVZEX0NPTlRST0xfQVBJX0NPTU1BTkRfVFlQRV9UKUlIMjY0RF9DTURfQ1RMX1NFVF9OVU1fQ09SRVMKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2ZsYWMvQzJTb2Z0RmxhY0VuYy5jcHAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9mbGFjL0MyU29mdEZsYWNFbmMuY3BwCmluZGV4IDZmZWFkM2EuLjE4MmVkZmIgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2ZsYWMvQzJTb2Z0RmxhY0VuYy5jcHAKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvZmxhYy9DMlNvZnRGbGFjRW5jLmNwcApAQCAtNDM5LDkgKzQzOSw2IEBACiAgICAgfQogICAgIEZMQUNfX2Jvb2wgb2sgPSBGTEFDX19zdHJlYW1fZW5jb2Rlcl9maW5pc2gobUZsYWNTdHJlYW1FbmNvZGVyKTsKICAgICBpZiAoIW9rKSByZXR1cm4gQzJfQ09SUlVQVEVEOwotICAgIG1Jc0ZpcnN0RnJhbWUgPSB0cnVlOwotICAgIG1BbmNob3JUaW1lU3RhbXAgPSAwdWxsOwotICAgIG1Qcm9jZXNzZWRTYW1wbGVzID0gMHU7CiAKICAgICByZXR1cm4gQzJfT0s7CiB9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9nYXYxL0MyU29mdEdhdjFEZWMuY3BwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvZ2F2MS9DMlNvZnRHYXYxRGVjLmNwcAppbmRleCBmODU3ZTg3Li40NzVkODYzIDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9nYXYxL0MyU29mdEdhdjFEZWMuY3BwCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2dhdjEvQzJTb2Z0R2F2MURlYy5jcHAKQEAgLTIwLDYgKzIwLDggQEAKIAogI2luY2x1ZGUgPEMyRGVidWcuaD4KICNpbmNsdWRlIDxDMlBsYXRmb3JtU3VwcG9ydC5oPgorI2luY2x1ZGUgPENvZGVjMkJ1ZmZlclV0aWxzLmg+CisjaW5jbHVkZSA8Q29kZWMyTWFwcGVyLmg+CiAjaW5jbHVkZSA8U2ltcGxlQzJJbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsb2cvbG9nLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BVXRpbHMuaD4KQEAgLTE1Niw2ICsxNTgsNDIgQEAKICAgICAgICAgICAgIC53aXRoU2V0dGVyKERlZmF1bHRDb2xvckFzcGVjdHNTZXR0ZXIpCiAgICAgICAgICAgICAuYnVpbGQoKSk7CiAKKyAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUNvZGVkQ29sb3JBc3BlY3RzLCBDMl9QQVJBTUtFWV9WVUlfQ09MT1JfQVNQRUNUUykKKyAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86OmlucHV0KAorICAgICAgICAgICAgICAgICAgICAgIDB1LCBDMkNvbG9yOjpSQU5HRV9MSU1JVEVELCBDMkNvbG9yOjpQUklNQVJJRVNfVU5TUEVDSUZJRUQsCisgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6VFJBTlNGRVJfVU5TUEVDSUZJRUQsIEMyQ29sb3I6Ok1BVFJJWF9VTlNQRUNJRklFRCkpCisgICAgICAgICAgICAgIC53aXRoRmllbGRzKHsKKyAgICAgICAgICAgICAgICAgIEMyRihtQ29kZWRDb2xvckFzcGVjdHMsIHJhbmdlKS5pblJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6UkFOR0VfVU5TUEVDSUZJRUQsICAgICBDMkNvbG9yOjpSQU5HRV9PVEhFUiksCisgICAgICAgICAgICAgICAgICBDMkYobUNvZGVkQ29sb3JBc3BlY3RzLCBwcmltYXJpZXMpLmluUmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpQUklNQVJJRVNfVU5TUEVDSUZJRUQsIEMyQ29sb3I6OlBSSU1BUklFU19PVEhFUiksCisgICAgICAgICAgICAgICAgICBDMkYobUNvZGVkQ29sb3JBc3BlY3RzLCB0cmFuc2ZlcikuaW5SYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlRSQU5TRkVSX1VOU1BFQ0lGSUVELCAgQzJDb2xvcjo6VFJBTlNGRVJfT1RIRVIpLAorICAgICAgICAgICAgICAgICAgQzJGKG1Db2RlZENvbG9yQXNwZWN0cywgbWF0cml4KS5pblJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6TUFUUklYX1VOU1BFQ0lGSUVELCAgICBDMkNvbG9yOjpNQVRSSVhfT1RIRVIpCisgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgIC53aXRoU2V0dGVyKENvZGVkQ29sb3JBc3BlY3RzU2V0dGVyKQorICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUNvbG9yQXNwZWN0cywgQzJfUEFSQU1LRVlfQ09MT1JfQVNQRUNUUykKKyAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86Om91dHB1dCgKKyAgICAgICAgICAgICAgICAgICAgICAwdSwgQzJDb2xvcjo6UkFOR0VfVU5TUEVDSUZJRUQsIEMyQ29sb3I6OlBSSU1BUklFU19VTlNQRUNJRklFRCwKKyAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpUUkFOU0ZFUl9VTlNQRUNJRklFRCwgQzJDb2xvcjo6TUFUUklYX1VOU1BFQ0lGSUVEKSkKKyAgICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgICAgQzJGKG1Db2xvckFzcGVjdHMsIHJhbmdlKS5pblJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6UkFOR0VfVU5TUEVDSUZJRUQsICAgICBDMkNvbG9yOjpSQU5HRV9PVEhFUiksCisgICAgICAgICAgICAgICAgICBDMkYobUNvbG9yQXNwZWN0cywgcHJpbWFyaWVzKS5pblJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6UFJJTUFSSUVTX1VOU1BFQ0lGSUVELCBDMkNvbG9yOjpQUklNQVJJRVNfT1RIRVIpLAorICAgICAgICAgICAgICAgICAgQzJGKG1Db2xvckFzcGVjdHMsIHRyYW5zZmVyKS5pblJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6VFJBTlNGRVJfVU5TUEVDSUZJRUQsICBDMkNvbG9yOjpUUkFOU0ZFUl9PVEhFUiksCisgICAgICAgICAgICAgICAgICBDMkYobUNvbG9yQXNwZWN0cywgbWF0cml4KS5pblJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6TUFUUklYX1VOU1BFQ0lGSUVELCAgICBDMkNvbG9yOjpNQVRSSVhfT1RIRVIpCisgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgIC53aXRoU2V0dGVyKENvbG9yQXNwZWN0c1NldHRlciwgbURlZmF1bHRDb2xvckFzcGVjdHMsIG1Db2RlZENvbG9yQXNwZWN0cykKKyAgICAgICAgICAgICAgLmJ1aWxkKCkpOworCiAgICAgLy8gVE9ETzogc3VwcG9ydCBtb3JlIGZvcm1hdHM/CiAgICAgYWRkUGFyYW1ldGVyKERlZmluZVBhcmFtKG1QaXhlbEZvcm1hdCwgQzJfUEFSQU1LRVlfUElYRUxfRk9STUFUKQogICAgICAgICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbVBpeGVsRm9ybWF0SW5mbzo6b3V0cHV0KApAQCAtMjE4LDYgKzI1NiwzNyBAQAogICAgIHJldHVybiBDMlI6Ok9rKCk7CiAgIH0KIAorICBzdGF0aWMgQzJSIENvZGVkQ29sb3JBc3BlY3RzU2V0dGVyKGJvb2wgbWF5QmxvY2ssIEMyUDxDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86OmlucHV0PiAmbWUpIHsKKyAgICAodm9pZCltYXlCbG9jazsKKyAgICBpZiAobWUudi5yYW5nZSA+IEMyQ29sb3I6OlJBTkdFX09USEVSKSB7CisgICAgICBtZS5zZXQoKS5yYW5nZSA9IEMyQ29sb3I6OlJBTkdFX09USEVSOworICAgIH0KKyAgICBpZiAobWUudi5wcmltYXJpZXMgPiBDMkNvbG9yOjpQUklNQVJJRVNfT1RIRVIpIHsKKyAgICAgIG1lLnNldCgpLnByaW1hcmllcyA9IEMyQ29sb3I6OlBSSU1BUklFU19PVEhFUjsKKyAgICB9CisgICAgaWYgKG1lLnYudHJhbnNmZXIgPiBDMkNvbG9yOjpUUkFOU0ZFUl9PVEhFUikgeworICAgICAgbWUuc2V0KCkudHJhbnNmZXIgPSBDMkNvbG9yOjpUUkFOU0ZFUl9PVEhFUjsKKyAgICB9CisgICAgaWYgKG1lLnYubWF0cml4ID4gQzJDb2xvcjo6TUFUUklYX09USEVSKSB7CisgICAgICBtZS5zZXQoKS5tYXRyaXggPSBDMkNvbG9yOjpNQVRSSVhfT1RIRVI7CisgICAgfQorICAgIHJldHVybiBDMlI6Ok9rKCk7CisgIH0KKworICBzdGF0aWMgQzJSIENvbG9yQXNwZWN0c1NldHRlcihib29sIG1heUJsb2NrLCBDMlA8QzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjpvdXRwdXQ+ICZtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQzJQPEMyU3RyZWFtQ29sb3JBc3BlY3RzVHVuaW5nOjpvdXRwdXQ+ICZkZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEMyUDxDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86OmlucHV0PiAmY29kZWQpIHsKKyAgICAodm9pZCltYXlCbG9jazsKKyAgICAvLyB0YWtlIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgdW5zcGVjaWZpZWQgZmllbGRzLCBhbmQgY29kZWQgdmFsdWVzIGZvciBzcGVjaWZpZWQgb25lcworICAgIG1lLnNldCgpLnJhbmdlID0gY29kZWQudi5yYW5nZSA9PSBSQU5HRV9VTlNQRUNJRklFRCA/IGRlZi52LnJhbmdlIDogY29kZWQudi5yYW5nZTsKKyAgICBtZS5zZXQoKS5wcmltYXJpZXMgPSBjb2RlZC52LnByaW1hcmllcyA9PSBQUklNQVJJRVNfVU5TUEVDSUZJRUQKKyAgICAgICAgPyBkZWYudi5wcmltYXJpZXMgOiBjb2RlZC52LnByaW1hcmllczsKKyAgICBtZS5zZXQoKS50cmFuc2ZlciA9IGNvZGVkLnYudHJhbnNmZXIgPT0gVFJBTlNGRVJfVU5TUEVDSUZJRUQKKyAgICAgICAgPyBkZWYudi50cmFuc2ZlciA6IGNvZGVkLnYudHJhbnNmZXI7CisgICAgbWUuc2V0KCkubWF0cml4ID0gY29kZWQudi5tYXRyaXggPT0gTUFUUklYX1VOU1BFQ0lGSUVEID8gZGVmLnYubWF0cml4IDogY29kZWQudi5tYXRyaXg7CisgICAgcmV0dXJuIEMyUjo6T2soKTsKKyAgfQorCiAgIHN0YXRpYyBDMlIgUHJvZmlsZUxldmVsU2V0dGVyKAogICAgICAgYm9vbCBtYXlCbG9jaywgQzJQPEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6aW5wdXQ+ICZtZSwKICAgICAgIGNvbnN0IEMyUDxDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6b3V0cHV0PiAmc2l6ZSkgewpAQCAtMjMyLDYgKzMwMSwxMCBAQAogICAgIHJldHVybiBtRGVmYXVsdENvbG9yQXNwZWN0czsKICAgfQogCisgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86Om91dHB1dD4gZ2V0Q29sb3JBc3BlY3RzX2woKSB7CisgICAgICByZXR1cm4gbUNvbG9yQXNwZWN0czsKKyAgfQorCiAgIHN0YXRpYyBDMlIgSGRyMTBQbHVzSW5mb0lucHV0U2V0dGVyKGJvb2wgbWF5QmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyUDxDMlN0cmVhbUhkcjEwUGx1c0luZm86OmlucHV0PiAmbWUpIHsKICAgICAodm9pZCltYXlCbG9jazsKQEAgLTI1NCw2ICszMjcsOCBAQAogICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Db2xvckluZm86Om91dHB1dD4gbUNvbG9ySW5mbzsKICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtUGl4ZWxGb3JtYXRJbmZvOjpvdXRwdXQ+IG1QaXhlbEZvcm1hdDsKICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQ29sb3JBc3BlY3RzVHVuaW5nOjpvdXRwdXQ+IG1EZWZhdWx0Q29sb3JBc3BlY3RzOworICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjppbnB1dD4gbUNvZGVkQ29sb3JBc3BlY3RzOworICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjpvdXRwdXQ+IG1Db2xvckFzcGVjdHM7CiAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUhkcjEwUGx1c0luZm86OmlucHV0PiBtSGRyMTBQbHVzSW5mb0lucHV0OwogICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1IZHIxMFBsdXNJbmZvOjpvdXRwdXQ+IG1IZHIxMFBsdXNJbmZvT3V0cHV0OwogfTsKQEAgLTI2NCw2ICszMzksNyBAQAogICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8U2ltcGxlSW50ZXJmYWNlPEludGZJbXBsPj4obmFtZSwgaWQsIGludGZJbXBsKSksCiAgICAgICBtSW50ZihpbnRmSW1wbCksCiAgICAgICBtQ29kZWNDdHgobnVsbHB0cikgeworICBtSXNGb3JtYXRSMTBHMTBCMTBBMlN1cHBvcnRlZCA9IElzRm9ybWF0UjEwRzEwQjEwQTJTdXBwb3J0ZWRGb3JMZWdhY3lSZW5kZXJpbmcoKTsKICAgZ2V0dGltZW9mZGF5KCZtVGltZVN0YXJ0LCBudWxscHRyKTsKICAgZ2V0dGltZW9mZGF5KCZtVGltZUVuZCwgbnVsbHB0cik7CiB9CkBAIC0zNzEsNiArNDQ3LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0Jsb2NrPiAmYmxvY2spIHsKICAgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiBidWZmZXIgPQogICAgICAgY3JlYXRlR3JhcGhpY0J1ZmZlcihibG9jaywgQzJSZWN0KG1XaWR0aCwgbUhlaWdodCkpOworICB7CisgICAgICBJbnRmSW1wbDo6TG9jayBsb2NrID0gbUludGYtPmxvY2soKTsKKyAgICAgIGJ1ZmZlci0+c2V0SW5mbyhtSW50Zi0+Z2V0Q29sb3JBc3BlY3RzX2woKSk7CisgIH0KICAgYXV0byBmaWxsV29yayA9IFtidWZmZXIsIGluZGV4XShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaykgewogICAgIHVpbnQzMl90IGZsYWdzID0gMDsKICAgICBpZiAoKHdvcmstPmlucHV0LmZsYWdzICYgQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTSkgJiYKQEAgLTYwOSw2ICs2ODksMzggQEAKICAgfQogfQogCit2b2lkIEMyU29mdEdhdjFEZWM6OmdldFZ1aVBhcmFtcyhjb25zdCBsaWJnYXYxOjpEZWNvZGVyQnVmZmVyICpidWZmZXIpIHsKKyAgICBWdWlDb2xvckFzcGVjdHMgdnVpQ29sb3JBc3BlY3RzOworICAgIHZ1aUNvbG9yQXNwZWN0cy5wcmltYXJpZXMgPSBidWZmZXItPmNvbG9yX3ByaW1hcnk7CisgICAgdnVpQ29sb3JBc3BlY3RzLnRyYW5zZmVyID0gYnVmZmVyLT50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3M7CisgICAgdnVpQ29sb3JBc3BlY3RzLmNvZWZmcyA9IGJ1ZmZlci0+bWF0cml4X2NvZWZmaWNpZW50czsKKyAgICB2dWlDb2xvckFzcGVjdHMuZnVsbFJhbmdlID0gYnVmZmVyLT5jb2xvcl9yYW5nZTsKKworICAgIC8vIGNvbnZlcnQgdnVpIGFzcGVjdHMgdG8gQzIgdmFsdWVzIGlmIGNoYW5nZWQKKyAgICBpZiAoISh2dWlDb2xvckFzcGVjdHMgPT0gbUJpdHN0cmVhbUNvbG9yQXNwZWN0cykpIHsKKyAgICAgICAgbUJpdHN0cmVhbUNvbG9yQXNwZWN0cyA9IHZ1aUNvbG9yQXNwZWN0czsKKyAgICAgICAgQ29sb3JBc3BlY3RzIHNmQXNwZWN0czsKKyAgICAgICAgQzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjppbnB1dCBjb2RlZEFzcGVjdHMgPSB7IDB1IH07CisgICAgICAgIENvbG9yVXRpbHM6OmNvbnZlcnRJc29Db2xvckFzcGVjdHNUb0NvZGVjQXNwZWN0cygKKyAgICAgICAgICAgICAgICB2dWlDb2xvckFzcGVjdHMucHJpbWFyaWVzLCB2dWlDb2xvckFzcGVjdHMudHJhbnNmZXIsIHZ1aUNvbG9yQXNwZWN0cy5jb2VmZnMsCisgICAgICAgICAgICAgICAgdnVpQ29sb3JBc3BlY3RzLmZ1bGxSYW5nZSwgc2ZBc3BlY3RzKTsKKyAgICAgICAgaWYgKCFDMk1hcHBlcjo6bWFwKHNmQXNwZWN0cy5tUHJpbWFyaWVzLCAmY29kZWRBc3BlY3RzLnByaW1hcmllcykpIHsKKyAgICAgICAgICAgIGNvZGVkQXNwZWN0cy5wcmltYXJpZXMgPSBDMkNvbG9yOjpQUklNQVJJRVNfVU5TUEVDSUZJRUQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFDMk1hcHBlcjo6bWFwKHNmQXNwZWN0cy5tUmFuZ2UsICZjb2RlZEFzcGVjdHMucmFuZ2UpKSB7CisgICAgICAgICAgICBjb2RlZEFzcGVjdHMucmFuZ2UgPSBDMkNvbG9yOjpSQU5HRV9VTlNQRUNJRklFRDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUMyTWFwcGVyOjptYXAoc2ZBc3BlY3RzLm1NYXRyaXhDb2VmZnMsICZjb2RlZEFzcGVjdHMubWF0cml4KSkgeworICAgICAgICAgICAgY29kZWRBc3BlY3RzLm1hdHJpeCA9IEMyQ29sb3I6Ok1BVFJJWF9VTlNQRUNJRklFRDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUMyTWFwcGVyOjptYXAoc2ZBc3BlY3RzLm1UcmFuc2ZlciwgJmNvZGVkQXNwZWN0cy50cmFuc2ZlcikpIHsKKyAgICAgICAgICAgIGNvZGVkQXNwZWN0cy50cmFuc2ZlciA9IEMyQ29sb3I6OlRSQU5TRkVSX1VOU1BFQ0lGSUVEOworICAgICAgICB9CisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlNldHRpbmdSZXN1bHQ+PiBmYWlsdXJlczsKKyAgICAgICAgbUludGYtPmNvbmZpZyh7JmNvZGVkQXNwZWN0c30sIEMyX01BWV9CTE9DSywgJmZhaWx1cmVzKTsKKyAgICB9Cit9CisKIGJvb2wgQzJTb2Z0R2F2MURlYzo6b3V0cHV0QnVmZmVyKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJsb2NrUG9vbD4gJnBvb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaykgewogICBpZiAoISh3b3JrICYmIHBvb2wpKSByZXR1cm4gZmFsc2U7CkBAIC02NTEsNiArNzYzLDcgQEAKICAgICB9CiAgIH0KIAorICBnZXRWdWlQYXJhbXMoYnVmZmVyKTsKICAgaWYgKCEoYnVmZmVyLT5pbWFnZV9mb3JtYXQgPT0gbGliZ2F2MTo6a0ltYWdlRm9ybWF0WXV2NDIwIHx8CiAgICAgICAgIGJ1ZmZlci0+aW1hZ2VfZm9ybWF0ID09IGxpYmdhdjE6OmtJbWFnZUZvcm1hdE1vbm9jaHJvbWU0MDApKSB7CiAgICAgQUxPR0UoImltYWdlX2Zvcm1hdCAlZCBub3Qgc3VwcG9ydGVkIiwgYnVmZmVyLT5pbWFnZV9mb3JtYXQpOwpAQCAtNjY2LDEyICs3NzksMTIgQEAKICAgdWludDMyX3QgZm9ybWF0ID0gSEFMX1BJWEVMX0ZPUk1BVF9ZVjEyOwogICBpZiAoYnVmZmVyLT5iaXRkZXB0aCA9PSAxMCkgewogICAgIEludGZJbXBsOjpMb2NrIGxvY2sgPSBtSW50Zi0+bG9jaygpOwotICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUNvbG9yQXNwZWN0c1R1bmluZzo6b3V0cHV0PiBkZWZhdWx0Q29sb3JBc3BlY3RzID0KLSAgICAgICAgbUludGYtPmdldERlZmF1bHRDb2xvckFzcGVjdHNfbCgpOworICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86Om91dHB1dD4gY29kZWRDb2xvckFzcGVjdHMgPQorICAgICAgICBtSW50Zi0+Z2V0Q29sb3JBc3BlY3RzX2woKTsKIAotICAgIGlmIChkZWZhdWx0Q29sb3JBc3BlY3RzLT5wcmltYXJpZXMgPT0gQzJDb2xvcjo6UFJJTUFSSUVTX0JUMjAyMCAmJgotICAgICAgICBkZWZhdWx0Q29sb3JBc3BlY3RzLT5tYXRyaXggPT0gQzJDb2xvcjo6TUFUUklYX0JUMjAyMCAmJgotICAgICAgICBkZWZhdWx0Q29sb3JBc3BlY3RzLT50cmFuc2ZlciA9PSBDMkNvbG9yOjpUUkFOU0ZFUl9TVDIwODQpIHsKKyAgICBpZiAoY29kZWRDb2xvckFzcGVjdHMtPnByaW1hcmllcyA9PSBDMkNvbG9yOjpQUklNQVJJRVNfQlQyMDIwICYmCisgICAgICAgIGNvZGVkQ29sb3JBc3BlY3RzLT5tYXRyaXggPT0gQzJDb2xvcjo6TUFUUklYX0JUMjAyMCAmJgorICAgICAgICBjb2RlZENvbG9yQXNwZWN0cy0+dHJhbnNmZXIgPT0gQzJDb2xvcjo6VFJBTlNGRVJfU1QyMDg0KSB7CiAgICAgICBpZiAoYnVmZmVyLT5pbWFnZV9mb3JtYXQgIT0gbGliZ2F2MTo6a0ltYWdlRm9ybWF0WXV2NDIwKSB7CiAgICAgICAgIEFMT0dFKCJPbmx5IFlVVjQyMCBvdXRwdXQgaXMgc3VwcG9ydGVkIHdoZW4gdGFyZ2V0aW5nIFJHQkFfMTAxMDEwMiIpOwogICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOwpAQCAtNjc5LDcgKzc5MiwxNCBAQAogICAgICAgICB3b3JrLT53b3JrbGV0c1Byb2Nlc3NlZCA9IDF1OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9Ci0gICAgICBmb3JtYXQgPSBIQUxfUElYRUxfRk9STUFUX1JHQkFfMTAxMDEwMjsKKyAgICAgIC8vIFRPRE8gKGIvMjAxNzg3OTU2KSBGb3IgZGV2aWNlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IEhBTF9QSVhFTF9GT1JNQVRfUkdCQV8xMDEwMTAyLAorICAgICAgLy8gSEFMX1BJWEVMX0ZPUk1BVF9ZVjEyIGlzIHVzZWQgYXMgYSB0ZW1wb3Jhcnkgd29yayBhcm91bmQuCisgICAgICBpZiAoIW1Jc0Zvcm1hdFIxMEcxMEIxMEEyU3VwcG9ydGVkKSAgeworICAgICAgICBBTE9HRSgiSEFMX1BJWEVMX0ZPUk1BVF9SR0JBXzEwMTAxMDIgaXNuJ3Qgc3VwcG9ydGVkIik7CisgICAgICAgIGZvcm1hdCA9IEhBTF9QSVhFTF9GT1JNQVRfWVYxMjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGZvcm1hdCA9IEhBTF9QSVhFTF9GT1JNQVRfUkdCQV8xMDEwMTAyOworICAgICAgfQogICAgIH0KICAgfQogICBDMk1lbW9yeVVzYWdlIHVzYWdlID0ge0MyTWVtb3J5VXNhZ2U6OkNQVV9SRUFELCBDMk1lbW9yeVVzYWdlOjpDUFVfV1JJVEV9OwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvZ2F2MS9DMlNvZnRHYXYxRGVjLmggYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9nYXYxL0MyU29mdEdhdjFEZWMuaAppbmRleCA1NTVhZGM5Li5mODI5OTJkIDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9nYXYxL0MyU29mdEdhdjFEZWMuaAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9nYXYxL0MyU29mdEdhdjFEZWMuaApAQCAtMTcsNyArMTcsMTAgQEAKICNpZm5kZWYgQU5EUk9JRF9DMl9TT0ZUX0dBVjFfREVDX0hfCiAjZGVmaW5lIEFORFJPSURfQzJfU09GVF9HQVYxX0RFQ19IXwogCisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9Db2xvclV0aWxzLmg+CisKICNpbmNsdWRlIDxTaW1wbGVDMkNvbXBvbmVudC5oPgorI2luY2x1ZGUgPEMyQ29uZmlnLmg+CiAjaW5jbHVkZSAibGliZ2F2MS9zcmMvZ2F2MS9kZWNvZGVyLmgiCiAjaW5jbHVkZSAibGliZ2F2MS9zcmMvZ2F2MS9kZWNvZGVyX3NldHRpbmdzLmgiCiAKQEAgLTU2LDEwICs1OSwzMyBAQAogICBib29sIG1TaWduYWxsZWRPdXRwdXRFb3M7CiAgIGJvb2wgbVNpZ25hbGxlZEVycm9yOwogCisgIC8vIENvbG9yIGFzcGVjdHMuIFRoZXNlIGFyZSBJU08gdmFsdWVzIGFuZCBhcmUgbWVhbnQgdG8gZGV0ZWN0IGNoYW5nZXMgaW4gYXNwZWN0cyB0byBhdm9pZAorICAvLyBjb252ZXJ0aW5nIHRoZW0gdG8gQzIgdmFsdWVzIGZvciBlYWNoIGZyYW1lCisgIHN0cnVjdCBWdWlDb2xvckFzcGVjdHMgeworICAgICAgdWludDhfdCBwcmltYXJpZXM7CisgICAgICB1aW50OF90IHRyYW5zZmVyOworICAgICAgdWludDhfdCBjb2VmZnM7CisgICAgICB1aW50OF90IGZ1bGxSYW5nZTsKKworICAgICAgLy8gZGVmYXVsdCBjb2xvciBhc3BlY3RzCisgICAgICBWdWlDb2xvckFzcGVjdHMoKQorICAgICAgICAgIDogcHJpbWFyaWVzKEMyQ29sb3I6OlBSSU1BUklFU19VTlNQRUNJRklFRCksCisgICAgICAgICAgICB0cmFuc2ZlcihDMkNvbG9yOjpUUkFOU0ZFUl9VTlNQRUNJRklFRCksCisgICAgICAgICAgICBjb2VmZnMoQzJDb2xvcjo6TUFUUklYX1VOU1BFQ0lGSUVEKSwKKyAgICAgICAgICAgIGZ1bGxSYW5nZShDMkNvbG9yOjpSQU5HRV9VTlNQRUNJRklFRCkgeyB9CisKKyAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWdWlDb2xvckFzcGVjdHMgJm8pIHsKKyAgICAgICAgICByZXR1cm4gcHJpbWFyaWVzID09IG8ucHJpbWFyaWVzICYmIHRyYW5zZmVyID09IG8udHJhbnNmZXIgJiYgY29lZmZzID09IG8uY29lZmZzCisgICAgICAgICAgICAgICAgICAmJiBmdWxsUmFuZ2UgPT0gby5mdWxsUmFuZ2U7CisgICAgICB9CisgIH0gbUJpdHN0cmVhbUNvbG9yQXNwZWN0czsKKwogICBzdHJ1Y3QgdGltZXZhbCBtVGltZVN0YXJ0OyAgLy8gVGltZSBhdCB0aGUgc3RhcnQgb2YgZGVjb2RlKCkKICAgc3RydWN0IHRpbWV2YWwgbVRpbWVFbmQ7ICAgIC8vIFRpbWUgYXQgdGhlIGVuZCBvZiBkZWNvZGUoKQorICBib29sIG1Jc0Zvcm1hdFIxMEcxMEIxMEEyU3VwcG9ydGVkOwogCiAgIGJvb2wgaW5pdERlY29kZXIoKTsKKyAgdm9pZCBnZXRWdWlQYXJhbXMoY29uc3QgbGliZ2F2MTo6RGVjb2RlckJ1ZmZlciAqYnVmZmVyKTsKICAgdm9pZCBkZXN0cm95RGVjb2RlcigpOwogICB2b2lkIGZpbmlzaFdvcmsodWludDY0X3QgaW5kZXgsIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+JiB3b3JrLAogICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyR3JhcGhpY0Jsb2NrPiYgYmxvY2spOwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvaGV2Yy9DMlNvZnRIZXZjRGVjLmNwcCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2hldmMvQzJTb2Z0SGV2Y0RlYy5jcHAKaW5kZXggNmJjZjNhMi4uNWY1YjJlZiAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvaGV2Yy9DMlNvZnRIZXZjRGVjLmNwcAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9oZXZjL0MyU29mdEhldmNEZWMuY3BwCkBAIC01MDIsNyArNTAyLDcgQEAKIHN0YXR1c190IEMyU29mdEhldmNEZWM6OmluaXREZWNvZGVyKCkgewogICAgIGlmIChPSyAhPSBjcmVhdGVEZWNvZGVyKCkpIHJldHVybiBVTktOT1dOX0VSUk9SOwogICAgIG1OdW1Db3JlcyA9IE1JTihnZXRDcHVDb3JlQ291bnQoKSwgTUFYX05VTV9DT1JFUyk7Ci0gICAgbVN0cmlkZSA9IEFMSUdOMzIobVdpZHRoKTsKKyAgICBtU3RyaWRlID0gQUxJR04xMjgobVdpZHRoKTsKICAgICBtU2lnbmFsbGVkRXJyb3IgPSBmYWxzZTsKICAgICByZXNldFBsdWdpbigpOwogICAgICh2b2lkKSBzZXROdW1Db3JlcygpOwpAQCAtNzY4LDIwICs3NjgsMjAgQEAKICAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKICAgICB9CiAgICAgaWYgKG1PdXRCbG9jayAmJgotICAgICAgICAgICAgKG1PdXRCbG9jay0+d2lkdGgoKSAhPSBBTElHTjMyKG1XaWR0aCkgfHwgbU91dEJsb2NrLT5oZWlnaHQoKSAhPSBtSGVpZ2h0KSkgeworICAgICAgICAgICAgKG1PdXRCbG9jay0+d2lkdGgoKSAhPSBBTElHTjEyOChtV2lkdGgpIHx8IG1PdXRCbG9jay0+aGVpZ2h0KCkgIT0gbUhlaWdodCkpIHsKICAgICAgICAgbU91dEJsb2NrLnJlc2V0KCk7CiAgICAgfQogICAgIGlmICghbU91dEJsb2NrKSB7CiAgICAgICAgIHVpbnQzMl90IGZvcm1hdCA9IEhBTF9QSVhFTF9GT1JNQVRfWVYxMjsKICAgICAgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSA9IHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSB9OwogICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPQotICAgICAgICAgICAgcG9vbC0+ZmV0Y2hHcmFwaGljQmxvY2soQUxJR04zMihtV2lkdGgpLCBtSGVpZ2h0LCBmb3JtYXQsIHVzYWdlLCAmbU91dEJsb2NrKTsKKyAgICAgICAgICAgIHBvb2wtPmZldGNoR3JhcGhpY0Jsb2NrKEFMSUdOMTI4KG1XaWR0aCksIG1IZWlnaHQsIGZvcm1hdCwgdXNhZ2UsICZtT3V0QmxvY2spOwogICAgICAgICBpZiAoZXJyICE9IEMyX09LKSB7CiAgICAgICAgICAgICBBTE9HRSgiZmV0Y2hHcmFwaGljQmxvY2sgZm9yIE91dHB1dCBmYWlsZWQgd2l0aCBzdGF0dXMgJWQiLCBlcnIpOwogICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgfQogICAgICAgICBBTE9HVigicHJvdmlkZWQgKCVkeCVkKSByZXF1aXJlZCAoJWR4JWQpIiwKLSAgICAgICAgICAgICAgbU91dEJsb2NrLT53aWR0aCgpLCBtT3V0QmxvY2stPmhlaWdodCgpLCBBTElHTjMyKG1XaWR0aCksIG1IZWlnaHQpOworICAgICAgICAgICAgICBtT3V0QmxvY2stPndpZHRoKCksIG1PdXRCbG9jay0+aGVpZ2h0KCksIEFMSUdOMTI4KG1XaWR0aCksIG1IZWlnaHQpOwogICAgIH0KIAogICAgIHJldHVybiBDMl9PSzsKQEAgLTkxNyw3ICs5MTcsNyBAQAogICAgICAgICBpZiAoMCA8IHBzX2RlY29kZV9vcC0+dTRfcGljX3dkICYmIDAgPCBwc19kZWNvZGVfb3AtPnU0X3BpY19odCkgewogICAgICAgICAgICAgaWYgKG1IZWFkZXJEZWNvZGVkID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgbUhlYWRlckRlY29kZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHNldFBhcmFtcyhBTElHTjMyKHBzX2RlY29kZV9vcC0+dTRfcGljX3dkKSwgSVZEX0RFQ09ERV9GUkFNRSk7CisgICAgICAgICAgICAgICAgc2V0UGFyYW1zKEFMSUdOMTI4KHBzX2RlY29kZV9vcC0+dTRfcGljX3dkKSwgSVZEX0RFQ09ERV9GUkFNRSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAocHNfZGVjb2RlX29wLT51NF9waWNfd2QgIT0gbVdpZHRoIHx8ICBwc19kZWNvZGVfb3AtPnU0X3BpY19odCAhPSBtSGVpZ2h0KSB7CiAgICAgICAgICAgICAgICAgbVdpZHRoID0gcHNfZGVjb2RlX29wLT51NF9waWNfd2Q7CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9oZXZjL0MyU29mdEhldmNEZWMuaCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2hldmMvQzJTb2Z0SGV2Y0RlYy5oCmluZGV4IGI5YjBhNDguLmI5Mjk2ZTkgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2hldmMvQzJTb2Z0SGV2Y0RlYy5oCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2hldmMvQzJTb2Z0SGV2Y0RlYy5oCkBAIC0zNiw3ICszNiw3IEBACiAjZGVmaW5lIGl2ZGV4dF9jdGxfc2V0X251bV9jb3Jlc19vcF90ICAgaWhldmNkX2N4YV9jdGxfc2V0X251bV9jb3Jlc19vcF90CiAjZGVmaW5lIGl2ZGV4dF9jdGxfZ2V0X3Z1aV9wYXJhbXNfaXBfdCAgaWhldmNkX2N4YV9jdGxfZ2V0X3Z1aV9wYXJhbXNfaXBfdAogI2RlZmluZSBpdmRleHRfY3RsX2dldF92dWlfcGFyYW1zX29wX3QgIGloZXZjZF9jeGFfY3RsX2dldF92dWlfcGFyYW1zX29wX3QKLSNkZWZpbmUgQUxJR04zMih4KSAgICAgICAgICAgICAgICAgICAgICAoKCgoeCkgKyAzMSkgPj4gNSkgPDwgNSkKKyNkZWZpbmUgQUxJR04xMjgoeCkgICAgICAgICAgICAgICAgICAgICAoKCgoeCkgKyAxMjcpID4+IDcpIDw8IDcpCiAjZGVmaW5lIE1BWF9OVU1fQ09SRVMgICAgICAgICAgICAgICAgICAgNAogI2RlZmluZSBJVkRFWFRfQ01EX0NUTF9TRVRfTlVNX0NPUkVTICAgIFwKICAgICAgICAgKElWRF9DT05UUk9MX0FQSV9DT01NQU5EX1RZUEVfVClJSEVWQ0RfQ1hBX0NNRF9DVExfU0VUX05VTV9DT1JFUwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvaGV2Yy9DMlNvZnRIZXZjRW5jLmNwcCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2hldmMvQzJTb2Z0SGV2Y0VuYy5jcHAKaW5kZXggNGJjMTc3Ny4uYjdhNTY4NiAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvaGV2Yy9DMlNvZnRIZXZjRW5jLmNwcAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9oZXZjL0MyU29mdEhldmNFbmMuY3BwCkBAIC0yNDUsNiArMjQ1LDE5IEBACiAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAud2l0aFNldHRlcihDb2RlZENvbG9yQXNwZWN0c1NldHRlciwgbUNvbG9yQXNwZWN0cykKICAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1QaWN0dXJlUXVhbnRpemF0aW9uLCBDMl9QQVJBTUtFWV9QSUNUVVJFX1FVQU5USVpBVElPTikKKyAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQoQzJTdHJlYW1QaWN0dXJlUXVhbnRpemF0aW9uVHVuaW5nOjpvdXRwdXQ6OkFsbG9jU2hhcmVkKAorICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBmbGV4Q291bnQgKi8sIDB1IC8qIHN0cmVhbSAqLykpCisgICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtUGljdHVyZVF1YW50aXphdGlvbiwgbS52YWx1ZXNbMF0udHlwZV8pLm9uZU9mKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7QzJDb25maWc6OnBpY3R1cmVfdHlwZV90KElfRlJBTUUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpwaWN0dXJlX3R5cGVfdChQX0ZSQU1FKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6cGljdHVyZV90eXBlX3QoQl9GUkFNRSl9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJGKG1QaWN0dXJlUXVhbnRpemF0aW9uLCBtLnZhbHVlc1swXS5taW4pLmFueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkYobVBpY3R1cmVRdWFudGl6YXRpb24sIG0udmFsdWVzWzBdLm1heCkuYW55KCl9KQorICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFBpY3R1cmVRdWFudGl6YXRpb25TZXR0ZXIpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBDMlIgSW5wdXREZWxheVNldHRlcigKQEAgLTQ2NCw5ICs0NzcsNjkgQEAKICAgICAgICAgbWUuc2V0KCkubWF0cml4ID0gY29kZWQudi5tYXRyaXg7CiAgICAgICAgIHJldHVybiBDMlI6Ok9rKCk7CiAgICAgfQorICAgIHN0YXRpYyBDMlIgUGljdHVyZVF1YW50aXphdGlvblNldHRlcihib29sIG1heUJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMlA8QzJTdHJlYW1QaWN0dXJlUXVhbnRpemF0aW9uVHVuaW5nOjpvdXRwdXQ+ICZtZSkgeworICAgICAgICAodm9pZCltYXlCbG9jazsKKworICAgICAgICAvLyB0aGVzZSBhcmUgdGhlIG9uZXMgd2UncmUgZ29pbmcgdG8gc2V0LCBzbyB3YW50IHRoZW0gdG8gZGVmYXVsdAorICAgICAgICAvLyB0byB0aGUgREVGQVVMVCB2YWx1ZXMgZm9yIHRoZSBjb2RlYworICAgICAgICBpbnQzMl90IGlNaW4gPSBIRVZDX1FQX01JTiwgcE1pbiA9IEhFVkNfUVBfTUlOLCBiTWluID0gSEVWQ19RUF9NSU47CisgICAgICAgIGludDMyX3QgaU1heCA9IEhFVkNfUVBfTUFYLCBwTWF4ID0gSEVWQ19RUF9NQVgsIGJNYXggPSBIRVZDX1FQX01BWDsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1lLnYuZmxleENvdW50KCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgQzJQaWN0dXJlUXVhbnRpemF0aW9uU3RydWN0ICZsYXllciA9IG1lLnYubS52YWx1ZXNbaV07CisKKyAgICAgICAgICAgIC8vIGxheWVyTWluIGlzIGNsYW1wZWQgdG8gW0hFVkNfUVBfTUlOLCBsYXllck1heF0gdG8gYXZvaWQgZXJyb3IKKyAgICAgICAgICAgIC8vIGNhc2VzIHdoZXJlIGxheWVyLm1pbiA+IGxheWVyLm1heAorICAgICAgICAgICAgaW50MzJfdCBsYXllck1heCA9IHN0ZDo6Y2xhbXAobGF5ZXIubWF4LCBIRVZDX1FQX01JTiwgSEVWQ19RUF9NQVgpOworICAgICAgICAgICAgaW50MzJfdCBsYXllck1pbiA9IHN0ZDo6Y2xhbXAobGF5ZXIubWluLCBIRVZDX1FQX01JTiwgbGF5ZXJNYXgpOworICAgICAgICAgICAgaWYgKGxheWVyLnR5cGVfID09IEMyQ29uZmlnOjpwaWN0dXJlX3R5cGVfdChJX0ZSQU1FKSkgeworICAgICAgICAgICAgICAgIGlNYXggPSBsYXllck1heDsKKyAgICAgICAgICAgICAgICBpTWluID0gbGF5ZXJNaW47CisgICAgICAgICAgICAgICAgQUxPR1YoImlNaW4gJWQgaU1heCAlZCIsIGlNaW4sIGlNYXgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChsYXllci50eXBlXyA9PSBDMkNvbmZpZzo6cGljdHVyZV90eXBlX3QoUF9GUkFNRSkpIHsKKyAgICAgICAgICAgICAgICBwTWF4ID0gbGF5ZXJNYXg7CisgICAgICAgICAgICAgICAgcE1pbiA9IGxheWVyTWluOworICAgICAgICAgICAgICAgIEFMT0dWKCJwTWluICVkIHBNYXggJWQiLCBwTWluLCBwTWF4KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5ZXIudHlwZV8gPT0gQzJDb25maWc6OnBpY3R1cmVfdHlwZV90KEJfRlJBTUUpKSB7CisgICAgICAgICAgICAgICAgYk1heCA9IGxheWVyTWF4OworICAgICAgICAgICAgICAgIGJNaW4gPSBsYXllck1pbjsKKyAgICAgICAgICAgICAgICBBTE9HVigiYk1pbiAlZCBiTWF4ICVkIiwgYk1pbiwgYk1heCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBBTE9HVigiUGljdHVyZVF1YW50aXphdGlvblNldHRlcihlbnRyeSk6IGkgJWQtJWQgcCAlZC0lZCBiICVkLSVkIiwKKyAgICAgICAgICAgICAgaU1pbiwgaU1heCwgcE1pbiwgcE1heCwgYk1pbiwgYk1heCk7CisKKyAgICAgICAgaW50MzJfdCBtYXhGcmFtZVFQID0gc3RkOjptaW4oc3RkOjptaW4oaU1heCwgcE1heCksIGJNYXgpOworICAgICAgICBpbnQzMl90IG1pbkZyYW1lUVAgPSBzdGQ6Om1heChzdGQ6Om1heChpTWluLCBwTWluKSwgYk1pbik7CisgICAgICAgIGlmIChtaW5GcmFtZVFQID4gbWF4RnJhbWVRUCkgeworICAgICAgICAgICAgbWluRnJhbWVRUCA9IG1heEZyYW1lUVA7CisgICAgICAgIH0KKworICAgICAgICAvLyBwdXQgdGhlbSBiYWNrIGludG8gdGhlIHN0cnVjdHVyZQorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1lLnYuZmxleENvdW50KCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgQzJQaWN0dXJlUXVhbnRpemF0aW9uU3RydWN0ICZsYXllciA9IG1lLnYubS52YWx1ZXNbaV07CisKKyAgICAgICAgICAgIGlmIChsYXllci50eXBlXyA9PSBDMkNvbmZpZzo6cGljdHVyZV90eXBlX3QoSV9GUkFNRSkgfHwKKyAgICAgICAgICAgICAgICBsYXllci50eXBlXyA9PSBDMkNvbmZpZzo6cGljdHVyZV90eXBlX3QoUF9GUkFNRSkgfHwKKyAgICAgICAgICAgICAgICBsYXllci50eXBlXyA9PSBDMkNvbmZpZzo6cGljdHVyZV90eXBlX3QoQl9GUkFNRSkpIHsKKyAgICAgICAgICAgICAgICBtZS5zZXQoKS5tLnZhbHVlc1tpXS5tYXggPSBtYXhGcmFtZVFQOworICAgICAgICAgICAgICAgIG1lLnNldCgpLm0udmFsdWVzW2ldLm1pbiA9IG1pbkZyYW1lUVA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBBTE9HVigiUGljdHVyZVF1YW50aXphdGlvblNldHRlcihleGl0KTogaSA9IHAgPSBiID0gJWQtJWQiLAorICAgICAgICAgICAgICBtaW5GcmFtZVFQLCBtYXhGcmFtZVFQKTsKKworICAgICAgICByZXR1cm4gQzJSOjpPaygpOworICAgIH0KICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjpvdXRwdXQ+IGdldENvZGVkQ29sb3JBc3BlY3RzX2woKSB7CiAgICAgICAgIHJldHVybiBtQ29kZWRDb2xvckFzcGVjdHM7CiAgICAgfQorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVBpY3R1cmVRdWFudGl6YXRpb25UdW5pbmc6Om91dHB1dD4gZ2V0UGljdHVyZVF1YW50aXphdGlvbl9sKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbVBpY3R1cmVRdWFudGl6YXRpb247CisgICAgfQogCiAgICBwcml2YXRlOgogICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVVzYWdlVHVuaW5nOjppbnB1dD4gbVVzYWdlOwpAQCAtNDgyLDYgKzU1NSw3IEBACiAgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtR29wVHVuaW5nOjpvdXRwdXQ+IG1Hb3A7CiAgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQ29sb3JBc3BlY3RzSW5mbzo6aW5wdXQ+IG1Db2xvckFzcGVjdHM7CiAgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQ29sb3JBc3BlY3RzSW5mbzo6b3V0cHV0PiBtQ29kZWRDb2xvckFzcGVjdHM7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtUGljdHVyZVF1YW50aXphdGlvblR1bmluZzo6b3V0cHV0PiBtUGljdHVyZVF1YW50aXphdGlvbjsKIH07CiAKIHN0YXRpYyBzaXplX3QgR2V0Q1BVQ29yZUNvdW50KCkgewpAQCAtNjU0LDEyICs3MjgsNDEgQEAKICAgICAgICAgbUVuY1BhcmFtcy5zX2NvZGluZ190b29sc19wcm1zLmk0X21heF90ZW1wb3JhbF9sYXllcnMgPSAzOwogICAgIH0KIAotICAgIHN3aXRjaCAobUJpdHJhdGVNb2RlLT52YWx1ZSkgewotICAgICAgICBjYXNlIEMyQ29uZmlnOjpCSVRSQVRFX0lHTk9SRToKLSAgICAgICAgICAgIG1FbmNQYXJhbXMuc19jb25maWdfcHJtcy5pNF9yYXRlX2NvbnRyb2xfbW9kZSA9IDM7Ci0gICAgICAgICAgICBtRW5jUGFyYW1zLnNfdGd0X2x5cl9wcm1zLmFzX3RndF9wYXJhbXNbMF0uYWk0X2ZyYW1lX3FwWzBdID0KLSAgICAgICAgICAgICAgICBnZXRRcEZyb21RdWFsaXR5KG1RdWFsaXR5LT52YWx1ZSk7CisgICAgLy8gd2UgcmVzb2x2ZWQgb3V0LW9mLWJvdW5kIGFuZCB1bnNwZWNpZmllZCB2YWx1ZXMgaW4gUGljdHVyZVF1YW50aXphdGlvblNldHRlcigpCisgICAgLy8gc28gd2UgY2FuIHN0YXJ0IHdpdGggZGVmYXVsdHMgdGhhdCBhcmUgb3ZlcnJpZGRlbiBhcyBuZWVkZWQuCisgICAgaW50MzJfdCBtYXhGcmFtZVFQID0gbUVuY1BhcmFtcy5zX2NvbmZpZ19wcm1zLmk0X21heF9mcmFtZV9xcDsKKyAgICBpbnQzMl90IG1pbkZyYW1lUVAgPSBtRW5jUGFyYW1zLnNfY29uZmlnX3BybXMuaTRfbWluX2ZyYW1lX3FwOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtUXBCb3VuZHMtPmZsZXhDb3VudCgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgQzJQaWN0dXJlUXVhbnRpemF0aW9uU3RydWN0ICZsYXllciA9IG1RcEJvdW5kcy0+bS52YWx1ZXNbaV07CisKKyAgICAgICAgLy8gbm8gbmVlZCB0byBsb29wLCBoZXZjIGxpYnJhcnkgdGFrZXMgc2FtZSByYW5nZSBmb3IgSS9QL0IgcGljdHVyZSB0eXBlCisgICAgICAgIGlmIChsYXllci50eXBlXyA9PSBDMkNvbmZpZzo6cGljdHVyZV90eXBlX3QoSV9GUkFNRSkgfHwKKyAgICAgICAgICAgIGxheWVyLnR5cGVfID09IEMyQ29uZmlnOjpwaWN0dXJlX3R5cGVfdChQX0ZSQU1FKSB8fAorICAgICAgICAgICAgbGF5ZXIudHlwZV8gPT0gQzJDb25maWc6OnBpY3R1cmVfdHlwZV90KEJfRlJBTUUpKSB7CisKKyAgICAgICAgICAgIG1heEZyYW1lUVAgPSBsYXllci5tYXg7CisgICAgICAgICAgICBtaW5GcmFtZVFQID0gbGF5ZXIubWluOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgbUVuY1BhcmFtcy5zX2NvbmZpZ19wcm1zLmk0X21heF9mcmFtZV9xcCA9IG1heEZyYW1lUVA7CisgICAgbUVuY1BhcmFtcy5zX2NvbmZpZ19wcm1zLmk0X21pbl9mcmFtZV9xcCA9IG1pbkZyYW1lUVA7CisKKyAgICBBTE9HVigiTWF4RnJhbWVRcDogJWQgTWluRnJhbWVRcDogJWQiLCBtYXhGcmFtZVFQLCBtaW5GcmFtZVFQKTsKKworICAgIG1FbmNQYXJhbXMuc190Z3RfbHlyX3BybXMuYXNfdGd0X3BhcmFtc1swXS5haTRfZnJhbWVfcXBbMF0gPQorICAgICAgICBzdGQ6OmNsYW1wKGtEZWZhdWx0SW5pdFFQLCBtaW5GcmFtZVFQLCBtYXhGcmFtZVFQKTsKKworICAgIHN3aXRjaCAobUJpdHJhdGVNb2RlLT52YWx1ZSkgeworICAgICAgICBjYXNlIEMyQ29uZmlnOjpCSVRSQVRFX0lHTk9SRTogeworICAgICAgICAgICAgbUVuY1BhcmFtcy5zX2NvbmZpZ19wcm1zLmk0X3JhdGVfY29udHJvbF9tb2RlID0gMzsKKyAgICAgICAgICAgIC8vIGVuc3VyZSBpbml0aWFsIHFwIHZhbHVlcyBhcmUgd2l0aGluIG91ciBuZXdseSBjb25maWd1cmVkIGJvdW5kcworICAgICAgICAgICAgaW50MzJfdCBmcmFtZVFwID0gZ2V0UXBGcm9tUXVhbGl0eShtUXVhbGl0eS0+dmFsdWUpOworICAgICAgICAgICAgbUVuY1BhcmFtcy5zX3RndF9seXJfcHJtcy5hc190Z3RfcGFyYW1zWzBdLmFpNF9mcmFtZV9xcFswXSA9CisgICAgICAgICAgICAgICAgc3RkOjpjbGFtcChmcmFtZVFwLCBtaW5GcmFtZVFQLCBtYXhGcmFtZVFQKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgQzJDb25maWc6OkJJVFJBVEVfQ09OU1Q6CiAgICAgICAgICAgICBtRW5jUGFyYW1zLnNfY29uZmlnX3BybXMuaTRfcmF0ZV9jb250cm9sX21vZGUgPSA1OwogICAgICAgICAgICAgYnJlYWs7CkBAIC03MjMsNiArODI2LDcgQEAKICAgICAgICAgbUdvcCA9IG1JbnRmLT5nZXRHb3BfbCgpOwogICAgICAgICBtUmVxdWVzdFN5bmMgPSBtSW50Zi0+Z2V0UmVxdWVzdFN5bmNfbCgpOwogICAgICAgICBtQ29sb3JBc3BlY3RzID0gbUludGYtPmdldENvZGVkQ29sb3JBc3BlY3RzX2woKTsKKyAgICAgICAgbVFwQm91bmRzID0gbUludGYtPmdldFBpY3R1cmVRdWFudGl6YXRpb25fbCgpOzsKICAgICB9CiAKICAgICBjMl9zdGF0dXNfdCBzdGF0dXMgPSBpbml0RW5jUGFyYW1zKCk7CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9oZXZjL0MyU29mdEhldmNFbmMuaCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2hldmMvQzJTb2Z0SGV2Y0VuYy5oCmluZGV4IDlkYmY2ODIuLjQyMTdhOGIgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2hldmMvQzJTb2Z0SGV2Y0VuYy5oCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL2hldmMvQzJTb2Z0SGV2Y0VuYy5oCkBAIC00Miw2ICs0MiwxMSBAQAogI2RlZmluZSBERUZBVUxUX0JfRlJBTUVTICAgICAwCiAjZGVmaW5lIERFRkFVTFRfUkNfTE9PS0FIRUFEIDAKIAorI2RlZmluZSBIRVZDX1FQX01JTiAxCisjZGVmaW5lIEhFVkNfUVBfTUFYIDUxCisKK2NvbnN0ZXhwciBpbnQzMl90IGtEZWZhdWx0SW5pdFFQID0gMzI7CisKIHN0cnVjdCBDMlNvZnRIZXZjRW5jIDogcHVibGljIFNpbXBsZUMyQ29tcG9uZW50IHsKICAgICBjbGFzcyBJbnRmSW1wbDsKIApAQCAtOTAsNiArOTUsNyBAQAogICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUdvcFR1bmluZzo6b3V0cHV0PiBtR29wOwogICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVJlcXVlc3RTeW5jRnJhbWVUdW5pbmc6Om91dHB1dD4gbVJlcXVlc3RTeW5jOwogICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86Om91dHB1dD4gbUNvbG9yQXNwZWN0czsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1QaWN0dXJlUXVhbnRpemF0aW9uVHVuaW5nOjpvdXRwdXQ+IG1RcEJvdW5kczsKICNpZmRlZiBGSUxFX0RVTVBfRU5BQkxFCiAgICAgY2hhciBtSW5GaWxlWzIwMF07CiAgICAgY2hhciBtT3V0RmlsZVsyMDBdOwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXAzL0MyU29mdE1wM0RlYy5jcHAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcDMvQzJTb2Z0TXAzRGVjLmNwcAppbmRleCBlMzk0NjcwLi4xNDljNmVlIDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcDMvQzJTb2Z0TXAzRGVjLmNwcAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcDMvQzJTb2Z0TXAzRGVjLmNwcApAQCAtMzIxLDYgKzMyMSwxMyBAQAogICAgIHJldHVybiBDMl9PSzsKIH0KIAorc3RhdGljIHZvaWQgZmlsbEVtcHR5V29yayhjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaykgeworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IHdvcmstPmlucHV0LmZsYWdzOworICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5idWZmZXJzLmNsZWFyKCk7CisgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwgPSB3b3JrLT5pbnB1dC5vcmRpbmFsOworICAgIHdvcmstPndvcmtsZXRzUHJvY2Vzc2VkID0gMXU7Cit9CisKIC8vIFRPRE86IENhbiBvdmVyYWxsIGVycm9yIGNoZWNraW5nIGJlIGltcHJvdmVkPyBBcyBpbiB0aGUgY2hlY2sgZm9yIHZhbGlkaXR5IG9mCiAvLyAgICAgICB3b3JrLCBwb29sIHB0ciwgd29yay0+aW5wdXQuYnVmZmVycy5zaXplKCkgPT0gMSwgLi4uCiAvLyBUT0RPOiBCbGluZCByZW1vdmFsIG9mIDUyOSBzYW1wbGVzIGZyb20gdGhlIG91dHB1dCBtYXkgbm90IHdvcmsuIEJlY2F1c2UKQEAgLTQ4NiwxNyArNDkzLDE3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpbnQ2NF90IG91dFRpbWVTdGFtcCA9IG1Qcm9jZXNzZWRTYW1wbGVzICogMTAwMDAwMGxsIC8gc2FtcGxpbmdSYXRlOwotICAgIG1Qcm9jZXNzZWRTYW1wbGVzICs9ICgob3V0U2l6ZSAtIG91dE9mZnNldCkgLyAobnVtQ2hhbm5lbHMgKiBzaXplb2YoaW50MTZfdCkpKTsKLSAgICBBTE9HVigib3V0IGJ1ZmZlciBhdHRyLiBvZmZzZXQgJWQgc2l6ZSAlZCB0aW1lc3RhbXAgJSIgUFJJZDY0ICIgIiwgb3V0T2Zmc2V0LAotICAgICAgICAgIG91dFNpemUgLSBvdXRPZmZzZXQsIG1BbmNob3JUaW1lU3RhbXAgKyBvdXRUaW1lU3RhbXApOwotICAgIGRlY29kZWRTaXplcy5jbGVhcigpOwotICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5mbGFncyA9IHdvcmstPmlucHV0LmZsYWdzOwotICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5idWZmZXJzLmNsZWFyKCk7Ci0gICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmJ1ZmZlcnMucHVzaF9iYWNrKAotICAgICAgICAgICAgY3JlYXRlTGluZWFyQnVmZmVyKGJsb2NrLCBvdXRPZmZzZXQsIG91dFNpemUgLSBvdXRPZmZzZXQpKTsKLSAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQub3JkaW5hbCA9IHdvcmstPmlucHV0Lm9yZGluYWw7Ci0gICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwudGltZXN0YW1wID0gbUFuY2hvclRpbWVTdGFtcCArIG91dFRpbWVTdGFtcDsKKyAgICBmaWxsRW1wdHlXb3JrKHdvcmspOworICAgIGlmIChzYW1wbGluZ1JhdGUgJiYgbnVtQ2hhbm5lbHMpIHsKKyAgICAgICAgaW50NjRfdCBvdXRUaW1lU3RhbXAgPSBtUHJvY2Vzc2VkU2FtcGxlcyAqIDEwMDAwMDBsbCAvIHNhbXBsaW5nUmF0ZTsKKyAgICAgICAgbVByb2Nlc3NlZFNhbXBsZXMgKz0gKChvdXRTaXplIC0gb3V0T2Zmc2V0KSAvIChudW1DaGFubmVscyAqIHNpemVvZihpbnQxNl90KSkpOworICAgICAgICBBTE9HVigib3V0IGJ1ZmZlciBhdHRyLiBvZmZzZXQgJWQgc2l6ZSAlZCB0aW1lc3RhbXAgJSIgUFJJZDY0ICIgIiwgb3V0T2Zmc2V0LAorICAgICAgICAgICAgICAgb3V0U2l6ZSAtIG91dE9mZnNldCwgbUFuY2hvclRpbWVTdGFtcCArIG91dFRpbWVTdGFtcCk7CisgICAgICAgIGRlY29kZWRTaXplcy5jbGVhcigpOworICAgICAgICB3b3JrLT53b3JrbGV0cy5mcm9udCgpLT5vdXRwdXQuYnVmZmVycy5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAgY3JlYXRlTGluZWFyQnVmZmVyKGJsb2NrLCBvdXRPZmZzZXQsIG91dFNpemUgLSBvdXRPZmZzZXQpKTsKKyAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0Lm9yZGluYWwudGltZXN0YW1wID0gbUFuY2hvclRpbWVTdGFtcCArIG91dFRpbWVTdGFtcDsKKyAgICB9CiAgICAgaWYgKGVvcykgewogICAgICAgICBtU2lnbmFsbGVkT3V0cHV0RW9zID0gdHJ1ZTsKICAgICAgICAgQUxPR1YoInNpZ25hbGxlZCBFT1MiKTsKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wZWcyL0MyU29mdE1wZWcyRGVjLmNwcCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wZWcyL0MyU29mdE1wZWcyRGVjLmNwcAppbmRleCBiMWNmMzg4Li41ZjliMzBiIDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnMi9DMlNvZnRNcGVnMkRlYy5jcHAKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzIvQzJTb2Z0TXBlZzJEZWMuY3BwCkBAIC01NzIsNyArNTcyLDcgQEAKICAgICBpZiAoT0sgIT0gY3JlYXRlRGVjb2RlcigpKSByZXR1cm4gVU5LTk9XTl9FUlJPUjsKIAogICAgIG1OdW1Db3JlcyA9IE1JTihnZXRDcHVDb3JlQ291bnQoKSwgTUFYX05VTV9DT1JFUyk7Ci0gICAgbVN0cmlkZSA9IEFMSUdOMzIobVdpZHRoKTsKKyAgICBtU3RyaWRlID0gQUxJR04xMjgobVdpZHRoKTsKICAgICBtU2lnbmFsbGVkRXJyb3IgPSBmYWxzZTsKICAgICByZXNldFBsdWdpbigpOwogICAgICh2b2lkKSBzZXROdW1Db3JlcygpOwpAQCAtODQ1LDIwICs4NDUsMjAgQEAKICAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKICAgICB9CiAgICAgaWYgKG1PdXRCbG9jayAmJgotICAgICAgICAgICAgKG1PdXRCbG9jay0+d2lkdGgoKSAhPSBBTElHTjMyKG1XaWR0aCkgfHwgbU91dEJsb2NrLT5oZWlnaHQoKSAhPSBtSGVpZ2h0KSkgeworICAgICAgICAgICAgKG1PdXRCbG9jay0+d2lkdGgoKSAhPSBBTElHTjEyOChtV2lkdGgpIHx8IG1PdXRCbG9jay0+aGVpZ2h0KCkgIT0gbUhlaWdodCkpIHsKICAgICAgICAgbU91dEJsb2NrLnJlc2V0KCk7CiAgICAgfQogICAgIGlmICghbU91dEJsb2NrKSB7CiAgICAgICAgIHVpbnQzMl90IGZvcm1hdCA9IEhBTF9QSVhFTF9GT1JNQVRfWVYxMjsKICAgICAgICAgQzJNZW1vcnlVc2FnZSB1c2FnZSA9IHsgQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQsIEMyTWVtb3J5VXNhZ2U6OkNQVV9XUklURSB9OwogICAgICAgICBjMl9zdGF0dXNfdCBlcnIgPQotICAgICAgICAgICAgcG9vbC0+ZmV0Y2hHcmFwaGljQmxvY2soQUxJR04zMihtV2lkdGgpLCBtSGVpZ2h0LCBmb3JtYXQsIHVzYWdlLCAmbU91dEJsb2NrKTsKKyAgICAgICAgICAgIHBvb2wtPmZldGNoR3JhcGhpY0Jsb2NrKEFMSUdOMTI4KG1XaWR0aCksIG1IZWlnaHQsIGZvcm1hdCwgdXNhZ2UsICZtT3V0QmxvY2spOwogICAgICAgICBpZiAoZXJyICE9IEMyX09LKSB7CiAgICAgICAgICAgICBBTE9HRSgiZmV0Y2hHcmFwaGljQmxvY2sgZm9yIE91dHB1dCBmYWlsZWQgd2l0aCBzdGF0dXMgJWQiLCBlcnIpOwogICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgfQogICAgICAgICBBTE9HVigicHJvdmlkZWQgKCVkeCVkKSByZXF1aXJlZCAoJWR4JWQpIiwKLSAgICAgICAgICAgICAgbU91dEJsb2NrLT53aWR0aCgpLCBtT3V0QmxvY2stPmhlaWdodCgpLCBBTElHTjMyKG1XaWR0aCksIG1IZWlnaHQpOworICAgICAgICAgICAgICBtT3V0QmxvY2stPndpZHRoKCksIG1PdXRCbG9jay0+aGVpZ2h0KCksIEFMSUdOMTI4KG1XaWR0aCksIG1IZWlnaHQpOwogICAgIH0KIAogICAgIHJldHVybiBDMl9PSzsKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wZWcyL0MyU29mdE1wZWcyRGVjLmggYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnMi9DMlNvZnRNcGVnMkRlYy5oCmluZGV4IGZkNjYzMDRhLi44YTI5YzE0IDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnMi9DMlNvZnRNcGVnMkRlYy5oCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wZWcyL0MyU29mdE1wZWcyRGVjLmgKQEAgLTM3LDcgKzM3LDcgQEAKICNkZWZpbmUgaXZkZXh0X2N0bF9zZXRfbnVtX2NvcmVzX29wX3QgICBpbXBlZzJkX2N0bF9zZXRfbnVtX2NvcmVzX29wX3QKICNkZWZpbmUgaXZkZXh0X2N0bF9nZXRfc2VxX2luZm9faXBfdCAgICBpbXBlZzJkX2N0bF9nZXRfc2VxX2luZm9faXBfdAogI2RlZmluZSBpdmRleHRfY3RsX2dldF9zZXFfaW5mb19vcF90ICAgIGltcGVnMmRfY3RsX2dldF9zZXFfaW5mb19vcF90Ci0jZGVmaW5lIEFMSUdOMzIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoKHgpICsgMzEpID4+IDUpIDw8IDUpCisjZGVmaW5lIEFMSUdOMTI4KHgpICAgICAgICAgICAgICAgICAgICAgKCgoKHgpICsgMTI3KSA+PiA3KSA8PCA3KQogI2RlZmluZSBNQVhfTlVNX0NPUkVTICAgICAgICAgICAgICAgICAgIDQKICNkZWZpbmUgSVZERVhUX0NNRF9DVExfU0VUX05VTV9DT1JFUyAgICBcCiAgICAgICAgIChJVkRfQ09OVFJPTF9BUElfQ09NTUFORF9UWVBFX1QpSU1QRUcyRF9DTURfQ1RMX1NFVF9OVU1fQ09SRVMKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wZWc0X2gyNjMvQzJTb2Z0TXBlZzREZWMuY3BwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9DMlNvZnRNcGVnNERlYy5jcHAKaW5kZXggZGRkMzEyZi4uODFmNDY3OSAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9DMlNvZnRNcGVnNERlYy5jcHAKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9DMlNvZnRNcGVnNERlYy5jcHAKQEAgLTIyOCw3ICsyMjgsNiBAQAogICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+ICZpbnRmSW1wbCkKICAgICA6IFNpbXBsZUMyQ29tcG9uZW50KHN0ZDo6bWFrZV9zaGFyZWQ8U2ltcGxlSW50ZXJmYWNlPEludGZJbXBsPj4obmFtZSwgaWQsIGludGZJbXBsKSksCiAgICAgICBtSW50ZihpbnRmSW1wbCksCi0gICAgICBtRGVjSGFuZGxlKG51bGxwdHIpLAogICAgICAgbU91dHB1dEJ1ZmZlcnt9LAogICAgICAgbUluaXRpYWxpemVkKGZhbHNlKSB7CiB9CkBAIC0yNDQsOSArMjQzLDcgQEAKIAogYzJfc3RhdHVzX3QgQzJTb2Z0TXBlZzREZWM6Om9uU3RvcCgpIHsKICAgICBpZiAobUluaXRpYWxpemVkKSB7Ci0gICAgICAgIGlmIChtRGVjSGFuZGxlKSB7Ci0gICAgICAgICAgICBQVkNsZWFuVXBWaWRlb0RlY29kZXIobURlY0hhbmRsZSk7Ci0gICAgICAgIH0KKyAgICAgICAgUFZDbGVhblVwVmlkZW9EZWNvZGVyKCZtVmlkZW9EZWNDb250cm9scyk7CiAgICAgICAgIG1Jbml0aWFsaXplZCA9IGZhbHNlOwogICAgIH0KICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBrTnVtT3V0cHV0QnVmZmVyczsgKytpKSB7CkBAIC0yNjksMjggKzI2NiwxNSBAQAogfQogCiB2b2lkIEMyU29mdE1wZWc0RGVjOjpvblJlbGVhc2UoKSB7Ci0gICAgaWYgKG1Jbml0aWFsaXplZCkgewotICAgICAgICBpZiAobURlY0hhbmRsZSkgewotICAgICAgICAgICAgUFZDbGVhblVwVmlkZW9EZWNvZGVyKG1EZWNIYW5kbGUpOwotICAgICAgICAgICAgZGVsZXRlIG1EZWNIYW5kbGU7Ci0gICAgICAgICAgICBtRGVjSGFuZGxlID0gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICBtSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICB9CisgICAgKHZvaWQpb25TdG9wKCk7CiAgICAgaWYgKG1PdXRCbG9jaykgewogICAgICAgICBtT3V0QmxvY2sucmVzZXQoKTsKICAgICB9Ci0gICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwga051bU91dHB1dEJ1ZmZlcnM7ICsraSkgewotICAgICAgICBpZiAobU91dHB1dEJ1ZmZlcltpXSkgewotICAgICAgICAgICAgZnJlZShtT3V0cHV0QnVmZmVyW2ldKTsKLSAgICAgICAgICAgIG1PdXRwdXRCdWZmZXJbaV0gPSBudWxscHRyOwotICAgICAgICB9Ci0gICAgfQogfQogCiBjMl9zdGF0dXNfdCBDMlNvZnRNcGVnNERlYzo6b25GbHVzaF9zbSgpIHsKICAgICBpZiAobUluaXRpYWxpemVkKSB7Ci0gICAgICAgIGlmIChQVl9UUlVFICE9IFBWUmVzZXRWaWRlb0RlY29kZXIobURlY0hhbmRsZSkpIHsKKyAgICAgICAgaWYgKFBWX1RSVUUgIT0gUFZSZXNldFZpZGVvRGVjb2RlcigmbVZpZGVvRGVjQ29udHJvbHMpKSB7CiAgICAgICAgICAgICByZXR1cm4gQzJfQ09SUlVQVEVEOwogICAgICAgICB9CiAgICAgfQpAQCAtMzA1LDE0ICsyODksOCBAQAogI2Vsc2UKICAgICBtSXNNcGVnNCA9IGZhbHNlOwogI2VuZGlmCi0gICAgaWYgKCFtRGVjSGFuZGxlKSB7Ci0gICAgICAgIG1EZWNIYW5kbGUgPSBuZXcgdGFndmlkZW9EZWNDb250cm9sczsKLSAgICB9Ci0gICAgaWYgKCFtRGVjSGFuZGxlKSB7Ci0gICAgICAgIEFMT0dFKCJtRGVjSGFuZGxlIGlzIG51bGwiKTsKLSAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKLSAgICB9Ci0gICAgbWVtc2V0KG1EZWNIYW5kbGUsIDAsIHNpemVvZih0YWd2aWRlb0RlY0NvbnRyb2xzKSk7CisKKyAgICBtZW1zZXQoJm1WaWRlb0RlY0NvbnRyb2xzLCAwLCBzaXplb2YodGFndmlkZW9EZWNDb250cm9scykpOwogCiAgICAgLyogVE9ETzogYnJpbmcgdGhlc2UgdmFsdWVzIHRvIDM1MiBhbmQgMjg4LiBJdCBjYW5ub3QgYmUgZG9uZSBhcyBvZiBub3cKICAgICAgKiBiZWNhdXNlLCBoMjYzIGRvZXNuJ3Qgc2VlbSB0byBhbGxvdyBwb3J0IHJlY29uZmlndXJhdGlvbi4gSW4gT01YLCB0aGUKQEAgLTM2OCwxMCArMzQ2LDYgQEAKIH0KIAogYzJfc3RhdHVzX3QgQzJTb2Z0TXBlZzREZWM6OmVuc3VyZURlY29kZXJTdGF0ZShjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCbG9ja1Bvb2w+ICZwb29sKSB7Ci0gICAgaWYgKCFtRGVjSGFuZGxlKSB7Ci0gICAgICAgIEFMT0dFKCJub3Qgc3VwcG9zZWQgdG8gYmUgaGVyZSwgaW52YWxpZCBkZWNvZGVyIGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJuIEMyX0NPUlJVUFRFRDsKLSAgICB9CiAKICAgICBtT3V0cHV0QnVmZmVyU2l6ZSA9IGFsaWduKG1JbnRmLT5nZXRNYXhXaWR0aCgpLCAxNikgKiBhbGlnbihtSW50Zi0+Z2V0TWF4SGVpZ2h0KCksIDE2KSAqIDMgLyAyOwogICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGtOdW1PdXRwdXRCdWZmZXJzOyArK2kpIHsKQEAgLTQwMiwxMCArMzc2LDEwIEBACiAKIGJvb2wgQzJTb2Z0TXBlZzREZWM6OmhhbmRsZVJlc0NoYW5nZShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaykgewogICAgIHVpbnQzMl90IGRpc3Bfd2lkdGgsIGRpc3BfaGVpZ2h0OwotICAgIFBWR2V0VmlkZW9EaW1lbnNpb25zKG1EZWNIYW5kbGUsIChpbnQzMiAqKSZkaXNwX3dpZHRoLCAoaW50MzIgKikmZGlzcF9oZWlnaHQpOworICAgIFBWR2V0VmlkZW9EaW1lbnNpb25zKCZtVmlkZW9EZWNDb250cm9scywgKGludDMyICopJmRpc3Bfd2lkdGgsIChpbnQzMiAqKSZkaXNwX2hlaWdodCk7CiAKICAgICB1aW50MzJfdCBidWZfd2lkdGgsIGJ1Zl9oZWlnaHQ7Ci0gICAgUFZHZXRCdWZmZXJEaW1lbnNpb25zKG1EZWNIYW5kbGUsIChpbnQzMiAqKSZidWZfd2lkdGgsIChpbnQzMiAqKSZidWZfaGVpZ2h0KTsKKyAgICBQVkdldEJ1ZmZlckRpbWVuc2lvbnMoJm1WaWRlb0RlY0NvbnRyb2xzLCAoaW50MzIgKikmYnVmX3dpZHRoLCAoaW50MzIgKikmYnVmX2hlaWdodCk7CiAKICAgICBDSEVDS19MRShkaXNwX3dpZHRoLCBidWZfd2lkdGgpOwogICAgIENIRUNLX0xFKGRpc3BfaGVpZ2h0LCBidWZfaGVpZ2h0KTsKQEAgLTQyNiwxMyArNDAwLDE0IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1Jc01wZWc0KSB7Ci0gICAgICAgICAgICBQVkNsZWFuVXBWaWRlb0RlY29kZXIobURlY0hhbmRsZSk7CisgICAgICAgICAgICBQVkNsZWFuVXBWaWRlb0RlY29kZXIoJm1WaWRlb0RlY0NvbnRyb2xzKTsKIAogICAgICAgICAgICAgdWludDhfdCAqdm9sX2RhdGFbMV17fTsKICAgICAgICAgICAgIGludDMyX3Qgdm9sX3NpemUgPSAwOwogCiAgICAgICAgICAgICBpZiAoIVBWSW5pdFZpZGVvRGVjb2RlcigKLSAgICAgICAgICAgICAgICAgICAgbURlY0hhbmRsZSwgdm9sX2RhdGEsICZ2b2xfc2l6ZSwgMSwgbUludGYtPmdldE1heFdpZHRoKCksIG1JbnRmLT5nZXRNYXhIZWlnaHQoKSwgSDI2M19NT0RFKSkgeworICAgICAgICAgICAgICAgICAgICAmbVZpZGVvRGVjQ29udHJvbHMsIHZvbF9kYXRhLCAmdm9sX3NpemUsIDEsIG1JbnRmLT5nZXRNYXhXaWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSW50Zi0+Z2V0TWF4SGVpZ2h0KCksIEgyNjNfTU9ERSkpIHsKICAgICAgICAgICAgICAgICBBTE9HRSgiRXJyb3IgaW4gUFZJbml0VmlkZW9EZWNvZGVyIEgyNjNfTU9ERSB3aGlsZSByZXNDaGFuZ2VkIHdhcyBzZXQgdG8gdHJ1ZSIpOwogICAgICAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CiAgICAgICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOwpAQCAtNTIyLDcgKzQ5Nyw3IEBACiAgICAgdWludDMyX3QgKnN0YXJ0X2NvZGUgPSAodWludDMyX3QgKiliaXRzdHJlYW07CiAgICAgYm9vbCB2b2xIZWFkZXIgPSAqc3RhcnRfY29kZSA9PSAweEIwMDEwMDAwOwogICAgIGlmICh2b2xIZWFkZXIpIHsKLSAgICAgICAgUFZDbGVhblVwVmlkZW9EZWNvZGVyKG1EZWNIYW5kbGUpOworICAgICAgICBQVkNsZWFuVXBWaWRlb0RlY29kZXIoJm1WaWRlb0RlY0NvbnRyb2xzKTsKICAgICAgICAgbUluaXRpYWxpemVkID0gZmFsc2U7CiAgICAgfQogCkBAIC01MzcsNyArNTEyLDcgQEAKICAgICAgICAgfQogICAgICAgICBNUDREZWNvZGluZ01vZGUgbW9kZSA9IChtSXNNcGVnNCkgPyBNUEVHNF9NT0RFIDogSDI2M19NT0RFOwogICAgICAgICBpZiAoIVBWSW5pdFZpZGVvRGVjb2RlcigKLSAgICAgICAgICAgICAgICBtRGVjSGFuZGxlLCB2b2xfZGF0YSwgJnZvbF9zaXplLCAxLAorICAgICAgICAgICAgICAgICZtVmlkZW9EZWNDb250cm9scywgdm9sX2RhdGEsICZ2b2xfc2l6ZSwgMSwKICAgICAgICAgICAgICAgICBtSW50Zi0+Z2V0TWF4V2lkdGgoKSwgbUludGYtPmdldE1heEhlaWdodCgpLCBtb2RlKSkgewogICAgICAgICAgICAgQUxPR0UoIlBWSW5pdFZpZGVvRGVjb2RlciBmYWlsZWQuIFVuc3VwcG9ydGVkIGNvbnRlbnQ/Iik7CiAgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOwpAQCAtNTQ1LDcgKzUyMCw3IEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbUluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgTVA0RGVjb2RpbmdNb2RlIGFjdHVhbE1vZGUgPSBQVkdldERlY0JpdHN0cmVhbU1vZGUobURlY0hhbmRsZSk7CisgICAgICAgIE1QNERlY29kaW5nTW9kZSBhY3R1YWxNb2RlID0gUFZHZXREZWNCaXRzdHJlYW1Nb2RlKCZtVmlkZW9EZWNDb250cm9scyk7CiAgICAgICAgIGlmIChtb2RlICE9IGFjdHVhbE1vZGUpIHsKICAgICAgICAgICAgIEFMT0dFKCJEZWNvZGVkIG1vZGUgbm90IHNhbWUgYXMgYWN0dWFsIG1vZGUgb2YgdGhlIGRlY29kZXIiKTsKICAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7CkBAIC01NTMsNyArNTI4LDcgQEAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFBWU2V0UG9zdFByb2NUeXBlKG1EZWNIYW5kbGUsIDApOworICAgICAgICBQVlNldFBvc3RQcm9jVHlwZSgmbVZpZGVvRGVjQ29udHJvbHMsIDApOwogICAgICAgICBpZiAoaGFuZGxlUmVzQ2hhbmdlKHdvcmspKSB7CiAgICAgICAgICAgICBBTE9HSSgiU2V0dGluZyB3aWR0aCBhbmQgaGVpZ2h0Iik7CiAgICAgICAgICAgICBDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6b3V0cHV0IHNpemUoMHUsIG1XaWR0aCwgbUhlaWdodCk7CkBAIC01OTAsNyArNTY1LDcgQEAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHVpbnQzMl90IHlGcmFtZVNpemUgPSBzaXplb2YodWludDgpICogbURlY0hhbmRsZS0+c2l6ZTsKKyAgICAgICAgdWludDMyX3QgeUZyYW1lU2l6ZSA9IHNpemVvZih1aW50OCkgKiBtVmlkZW9EZWNDb250cm9scy5zaXplOwogICAgICAgICBpZiAobU91dHB1dEJ1ZmZlclNpemUgPCB5RnJhbWVTaXplICogMyAvIDIpewogICAgICAgICAgICAgQUxPR0UoIlRvbyBzbWFsbCBvdXRwdXQgYnVmZmVyOiAlenUgYnl0ZXMiLCBtT3V0cHV0QnVmZmVyU2l6ZSk7CiAgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOwpAQCAtNTk5LDcgKzU3NCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1GcmFtZXNDb25maWd1cmVkKSB7Ci0gICAgICAgICAgICBQVlNldFJlZmVyZW5jZVlVVihtRGVjSGFuZGxlLG1PdXRwdXRCdWZmZXJbMV0pOworICAgICAgICAgICAgUFZTZXRSZWZlcmVuY2VZVVYoJm1WaWRlb0RlY0NvbnRyb2xzLG1PdXRwdXRCdWZmZXJbMV0pOwogICAgICAgICAgICAgbUZyYW1lc0NvbmZpZ3VyZWQgPSB0cnVlOwogICAgICAgICB9CiAKQEAgLTYxMCw3ICs1ODUsNyBAQAogICAgICAgICB1aW50OF90ICpiaXRzdHJlYW1UbXAgPSBiaXRzdHJlYW07CiAgICAgICAgIHVpbnQzMl90IHRpbWVzdGFtcCA9IHdvcmtJbmRleDsKICAgICAgICAgaWYgKFBWRGVjb2RlVm9wSGVhZGVyKAotICAgICAgICAgICAgICAgICAgICBtRGVjSGFuZGxlLCAmYml0c3RyZWFtVG1wLCAmdGltZXN0YW1wLCAmdG1wSW5TaXplLAorICAgICAgICAgICAgICAgICAgICAmbVZpZGVvRGVjQ29udHJvbHMsICZiaXRzdHJlYW1UbXAsICZ0aW1lc3RhbXAsICZ0bXBJblNpemUsCiAgICAgICAgICAgICAgICAgICAgICZoZWFkZXJfaW5mbywgJnVzZUV4dFRpbWVzdGFtcCwKICAgICAgICAgICAgICAgICAgICAgbU91dHB1dEJ1ZmZlclttTnVtU2FtcGxlc091dHB1dCAmIDFdKSAhPSBQVl9UUlVFKSB7CiAgICAgICAgICAgICBBTE9HRSgiZmFpbGVkIHRvIGRlY29kZSB2b3AgaGVhZGVyLiIpOwpAQCAtNjQyLDcgKzYxNyw3IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChQVkRlY29kZVZvcEJvZHkobURlY0hhbmRsZSwgJnRtcEluU2l6ZSkgIT0gUFZfVFJVRSkgeworICAgICAgICBpZiAoUFZEZWNvZGVWb3BCb2R5KCZtVmlkZW9EZWNDb250cm9scywgJnRtcEluU2l6ZSkgIT0gUFZfVFJVRSkgewogICAgICAgICAgICAgQUxPR0UoImZhaWxlZCB0byBkZWNvZGUgdmlkZW8gZnJhbWUuIik7CiAgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgd29yay0+cmVzdWx0ID0gQzJfQ09SUlVQVEVEOwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9DMlNvZnRNcGVnNERlYy5oIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9DMlNvZnRNcGVnNERlYy5oCmluZGV4IDcxNmEwOTUuLmZlZDA0YzkgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL21wZWc0X2gyNjMvQzJTb2Z0TXBlZzREZWMuaAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnNF9oMjYzL0MyU29mdE1wZWc0RGVjLmgKQEAgLTE5LDggKzE5LDggQEAKIAogI2luY2x1ZGUgPFNpbXBsZUMyQ29tcG9uZW50Lmg+CiAKKyNpbmNsdWRlIDxtcDRkZWNfYXBpLmg+CiAKLXN0cnVjdCB0YWd2aWRlb0RlY0NvbnRyb2xzOwogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKQEAgLTU0LDcgKzU0LDcgQEAKICAgICBib29sIGhhbmRsZVJlc0NoYW5nZShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yayk7CiAKICAgICBzdGQ6OnNoYXJlZF9wdHI8SW50ZkltcGw+IG1JbnRmOwotICAgIHRhZ3ZpZGVvRGVjQ29udHJvbHMgKm1EZWNIYW5kbGU7CisgICAgdGFndmlkZW9EZWNDb250cm9scyBtVmlkZW9EZWNDb250cm9sczsKICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJHcmFwaGljQmxvY2s+IG1PdXRCbG9jazsKICAgICB1aW50OF90ICptT3V0cHV0QnVmZmVyW2tOdW1PdXRwdXRCdWZmZXJzXTsKICAgICBzaXplX3QgIG1PdXRwdXRCdWZmZXJTaXplOwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvbXBlZzRfaDI2My9DMlNvZnRNcGVnNEVuYy5jcHAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnNF9oMjYzL0MyU29mdE1wZWc0RW5jLmNwcAppbmRleCAzYzg3NTMxLi4zYmZlYzY2IDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnNF9oMjYzL0MyU29mdE1wZWc0RW5jLmNwcAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy9tcGVnNF9oMjYzL0MyU29mdE1wZWc0RW5jLmNwcApAQCAtNDM2LDE2ICs0MzYsMTggQEAKICAgICAgICAgfQogCiAgICAgICAgICsrbU51bUlucHV0RnJhbWVzOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJTdHJlYW1Jbml0RGF0YUluZm86Om91dHB1dD4gY3NkID0KLSAgICAgICAgICAgIEMyU3RyZWFtSW5pdERhdGFJbmZvOjpvdXRwdXQ6OkFsbG9jVW5pcXVlKG91dHB1dFNpemUsIDB1KTsKLSAgICAgICAgaWYgKCFjc2QpIHsKLSAgICAgICAgICAgIEFMT0dFKCJDU0QgYWxsb2NhdGlvbiBmYWlsZWQiKTsKLSAgICAgICAgICAgIG1TaWduYWxsZWRFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICB3b3JrLT5yZXN1bHQgPSBDMl9OT19NRU1PUlk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChvdXRwdXRTaXplKSB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJTdHJlYW1Jbml0RGF0YUluZm86Om91dHB1dD4gY3NkID0KKyAgICAgICAgICAgICAgICBDMlN0cmVhbUluaXREYXRhSW5mbzo6b3V0cHV0OjpBbGxvY1VuaXF1ZShvdXRwdXRTaXplLCAwdSk7CisgICAgICAgICAgICBpZiAoIWNzZCkgeworICAgICAgICAgICAgICAgIEFMT0dFKCJDU0QgYWxsb2NhdGlvbiBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIHdvcmstPnJlc3VsdCA9IEMyX05PX01FTU9SWTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZW1jcHkoY3NkLT5tLnZhbHVlLCBvdXRQdHIsIG91dHB1dFNpemUpOworICAgICAgICAgICAgd29yay0+d29ya2xldHMuZnJvbnQoKS0+b3V0cHV0LmNvbmZpZ1VwZGF0ZS5wdXNoX2JhY2soc3RkOjptb3ZlKGNzZCkpOwogICAgICAgICB9Ci0gICAgICAgIG1lbWNweShjc2QtPm0udmFsdWUsIG91dFB0ciwgb3V0cHV0U2l6ZSk7Ci0gICAgICAgIHdvcmstPndvcmtsZXRzLmZyb250KCktPm91dHB1dC5jb25maWdVcGRhdGUucHVzaF9iYWNrKHN0ZDo6bW92ZShjc2QpKTsKICAgICB9CiAKICAgICAvLyBoYW5kbGUgZHluYW1pYyBiaXRyYXRlIGNoYW5nZQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdnB4L0MyU29mdFZweERlYy5jcHAgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnB4RGVjLmNwcAppbmRleCAyOTUzZDkwLi4yZGE5ZDViIDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnB4RGVjLmNwcAorKysgYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnB4RGVjLmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSA8QzJEZWJ1Zy5oPgogI2luY2x1ZGUgPEMyUGxhdGZvcm1TdXBwb3J0Lmg+CisjaW5jbHVkZSA8Q29kZWMyQnVmZmVyVXRpbHMuaD4KICNpbmNsdWRlIDxTaW1wbGVDMkludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiQzJTb2Z0VnB4RGVjLmgiCkBAIC0xNDksOCArMTUwLDE2IEBACiAjZWxzZQogICAgICAgICBhZGRQYXJhbWV0ZXIoCiAgICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obVByb2ZpbGVMZXZlbCwgQzJfUEFSQU1LRVlfUFJPRklMRV9MRVZFTCkKLSAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6aW5wdXQoMHUsCi0gICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6UFJPRklMRV9VTlVTRUQsIEMyQ29uZmlnOjpMRVZFTF9VTlVTRUQpKQorICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1Qcm9maWxlTGV2ZWxJbmZvOjppbnB1dCgwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29uZmlnOjpQUk9GSUxFX1ZQOF8wLCBDMkNvbmZpZzo6TEVWRUxfVU5VU0VEKSkKKyAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgICAgIEMyRihtUHJvZmlsZUxldmVsLCBwcm9maWxlKS5lcXVhbFRvKAorICAgICAgICAgICAgICAgICAgICAgICAgUFJPRklMRV9WUDhfMAorICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICBDMkYobVByb2ZpbGVMZXZlbCwgbGV2ZWwpLmVxdWFsVG8oCisgICAgICAgICAgICAgICAgICAgICAgICBMRVZFTF9VTlVTRUQpLAorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoUHJvZmlsZUxldmVsU2V0dGVyLCBtU2l6ZSkKICAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CiAjZW5kaWYKIApAQCAtMzQzLDYgKzM1Miw3IEBACiAgICAgICBtQ29kZWNDdHgobnVsbHB0ciksCiAgICAgICBtQ29yZUNvdW50KDEpLAogICAgICAgbVF1ZXVlKG5ldyBNdXRleGVkPENvbnZlcnNpb25RdWV1ZT4pIHsKKyAgICAgIG1Jc0Zvcm1hdFIxMEcxMEIxMEEyU3VwcG9ydGVkID0gSXNGb3JtYXRSMTBHMTBCMTBBMlN1cHBvcnRlZEZvckxlZ2FjeVJlbmRlcmluZygpOwogfQogCiBDMlNvZnRWcHhEZWM6On5DMlNvZnRWcHhEZWMoKSB7CkBAIC03OTYsNyArODA2LDE0IEBACiAgICAgICAgIGlmIChkZWZhdWx0Q29sb3JBc3BlY3RzLT5wcmltYXJpZXMgPT0gQzJDb2xvcjo6UFJJTUFSSUVTX0JUMjAyMCAmJgogICAgICAgICAgICAgZGVmYXVsdENvbG9yQXNwZWN0cy0+bWF0cml4ID09IEMyQ29sb3I6Ok1BVFJJWF9CVDIwMjAgJiYKICAgICAgICAgICAgIGRlZmF1bHRDb2xvckFzcGVjdHMtPnRyYW5zZmVyID09IEMyQ29sb3I6OlRSQU5TRkVSX1NUMjA4NCkgewotICAgICAgICAgICAgZm9ybWF0ID0gSEFMX1BJWEVMX0ZPUk1BVF9SR0JBXzEwMTAxMDI7CisgICAgICAgICAgICAvLyBUT0RPIChiLzIwMTc4Nzk1NikgRm9yIGRldmljZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBIQUxfUElYRUxfRk9STUFUX1JHQkFfMTAxMDEwMiwKKyAgICAgICAgICAgIC8vIEhBTF9QSVhFTF9GT1JNQVRfWVYxMiBpcyB1c2VkIGFzIGEgdGVtcG9yYXJ5IHdvcmsgYXJvdW5kLgorICAgICAgICAgICAgaWYgKCFtSXNGb3JtYXRSMTBHMTBCMTBBMlN1cHBvcnRlZCkgIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiSEFMX1BJWEVMX0ZPUk1BVF9SR0JBXzEwMTAxMDIgaXNuJ3Qgc3VwcG9ydGVkIik7CisgICAgICAgICAgICAgICAgZm9ybWF0ID0gSEFMX1BJWEVMX0ZPUk1BVF9ZVjEyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3JtYXQgPSBIQUxfUElYRUxfRk9STUFUX1JHQkFfMTAxMDEwMjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBDMk1lbW9yeVVzYWdlIHVzYWdlID0geyBDMk1lbW9yeVVzYWdlOjpDUFVfUkVBRCwgQzJNZW1vcnlVc2FnZTo6Q1BVX1dSSVRFIH07CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnB4RGVjLmggYi9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnB4RGVjLmgKaW5kZXggMjA2NTE2NS4uYWRlMTYyZCAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdnB4L0MyU29mdFZweERlYy5oCisrKyBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZweC9DMlNvZnRWcHhEZWMuaApAQCAtODAsNyArODAsNyBAQAogICAgIH07CiAgICAgc3RkOjpzaGFyZWRfcHRyPE11dGV4ZWQ8Q29udmVyc2lvblF1ZXVlPj4gbVF1ZXVlOwogICAgIHN0ZDo6dmVjdG9yPHNwPENvbnZlcnRlclRocmVhZD4+IG1Db252ZXJ0ZXJUaHJlYWRzOwotCisgICAgYm9vbCBtSXNGb3JtYXRSMTBHMTBCMTBBMlN1cHBvcnRlZDsKICAgICBzdGF0dXNfdCBpbml0RGVjb2RlcigpOwogICAgIHN0YXR1c190IGRlc3Ryb3lEZWNvZGVyKCk7CiAgICAgdm9pZCBmaW5pc2hXb3JrKHVpbnQ2NF90IGluZGV4LCBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPiAmd29yaywKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZweC9DMlNvZnRWcHhFbmMuY3BwIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdnB4L0MyU29mdFZweEVuYy5jcHAKaW5kZXggNzQ4NmQyNy4uNjE3NzY5YiAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdnB4L0MyU29mdFZweEVuYy5jcHAKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdnB4L0MyU29mdFZweEVuYy5jcHAKQEAgLTMxLDYgKzMxLDI1NSBAQAogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKK0MyU29mdFZweEVuYzo6SW50ZkltcGw6OkludGZJbXBsKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gJmhlbHBlcikKKyAgICA6IFNpbXBsZUludGVyZmFjZTx2b2lkPjo6QmFzZVBhcmFtcygKKyAgICAgICAgICAgIGhlbHBlciwKKyAgICAgICAgICAgIENPTVBPTkVOVF9OQU1FLAorICAgICAgICAgICAgQzJDb21wb25lbnQ6OktJTkRfRU5DT0RFUiwKKyAgICAgICAgICAgIEMyQ29tcG9uZW50OjpET01BSU5fVklERU8sCisgICAgICAgICAgICBNRURJQV9NSU1FVFlQRV9WSURFTykgeworICAgIG5vUHJpdmF0ZUJ1ZmZlcnMoKTsgLy8gVE9ETzogYWNjb3VudCBmb3Igb3VyIGJ1ZmZlcnMgaGVyZQorICAgIG5vSW5wdXRSZWZlcmVuY2VzKCk7CisgICAgbm9PdXRwdXRSZWZlcmVuY2VzKCk7CisgICAgbm9JbnB1dExhdGVuY3koKTsKKyAgICBub1RpbWVTdHJldGNoKCk7CisgICAgc2V0RGVyaXZlZEluc3RhbmNlKHRoaXMpOworCisgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obUF0dHJpYiwgQzJfUEFSQU1LRVlfQ09NUE9ORU5UX0FUVFJJQlVURVMpCisgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyQ29tcG9uZW50QXR0cmlidXRlc1NldHRpbmcoCisgICAgICAgICAgICAgICAgQzJDb21wb25lbnQ6OkFUVFJJQl9JU19URU1QT1JBTCkpCisgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtVXNhZ2UsIEMyX1BBUkFNS0VZX0lOUFVUX1NUUkVBTV9VU0FHRSkKKyAgICAgICAgICAgIC53aXRoQ29uc3RWYWx1ZShuZXcgQzJTdHJlYW1Vc2FnZVR1bmluZzo6aW5wdXQoCisgICAgICAgICAgICAgICAgICAgIDB1LCAodWludDY0X3QpQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQpKQorICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICBEZWZpbmVQYXJhbShtU2l6ZSwgQzJfUEFSQU1LRVlfUElDVFVSRV9TSVpFKQorICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6aW5wdXQoMHUsIDMyMCwgMjQwKSkKKyAgICAgICAgICAgIC53aXRoRmllbGRzKHsKKyAgICAgICAgICAgICAgICBDMkYobVNpemUsIHdpZHRoKS5pblJhbmdlKDIsIDIwNDgsIDIpLAorICAgICAgICAgICAgICAgIEMyRihtU2l6ZSwgaGVpZ2h0KS5pblJhbmdlKDIsIDIwNDgsIDIpLAorICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIC53aXRoU2V0dGVyKFNpemVTZXR0ZXIpCisgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgIERlZmluZVBhcmFtKG1CaXRyYXRlTW9kZSwgQzJfUEFSQU1LRVlfQklUUkFURV9NT0RFKQorICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbUJpdHJhdGVNb2RlVHVuaW5nOjpvdXRwdXQoCisgICAgICAgICAgICAgICAgICAgIDB1LCBDMkNvbmZpZzo6QklUUkFURV9WQVJJQUJMRSkpCisgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgQzJGKG1CaXRyYXRlTW9kZSwgdmFsdWUpLm9uZU9mKHsKKyAgICAgICAgICAgICAgICAgICAgQzJDb25maWc6OkJJVFJBVEVfQ09OU1QsIEMyQ29uZmlnOjpCSVRSQVRFX1ZBUklBQkxFIH0pCisgICAgICAgICAgICB9KQorICAgICAgICAgICAgLndpdGhTZXR0ZXIoCisgICAgICAgICAgICAgICAgU2V0dGVyPGRlY2x0eXBlKCptQml0cmF0ZU1vZGUpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKQorICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICBEZWZpbmVQYXJhbShtRnJhbWVSYXRlLCBDMl9QQVJBTUtFWV9GUkFNRV9SQVRFKQorICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbUZyYW1lUmF0ZUluZm86Om91dHB1dCgwdSwgMzAuKSkKKyAgICAgICAgICAgIC8vIFRPRE86IE1vcmUgcmVzdHJpY3Rpb24/CisgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1GcmFtZVJhdGUsIHZhbHVlKS5ncmVhdGVyVGhhbigwLil9KQorICAgICAgICAgICAgLndpdGhTZXR0ZXIoCisgICAgICAgICAgICAgICAgU2V0dGVyPGRlY2x0eXBlKCptRnJhbWVSYXRlKT46OlN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgRGVmaW5lUGFyYW0obUxheWVyaW5nLCBDMl9QQVJBTUtFWV9URU1QT1JBTF9MQVlFUklORykKKyAgICAgICAgICAgIC53aXRoRGVmYXVsdChDMlN0cmVhbVRlbXBvcmFsTGF5ZXJpbmdUdW5pbmc6Om91dHB1dDo6QWxsb2NTaGFyZWQoMHUsIDAsIDAsIDApKQorICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgIEMyRihtTGF5ZXJpbmcsIG0ubGF5ZXJDb3VudCkuaW5SYW5nZSgwLCA0KSwKKyAgICAgICAgICAgICAgICBDMkYobUxheWVyaW5nLCBtLmJMYXllckNvdW50KS5pblJhbmdlKDAsIDApLAorICAgICAgICAgICAgICAgIEMyRihtTGF5ZXJpbmcsIG0uYml0cmF0ZVJhdGlvcykuaW5SYW5nZSgwLiwgMS4pCisgICAgICAgICAgICB9KQorICAgICAgICAgICAgLndpdGhTZXR0ZXIoTGF5ZXJpbmdTZXR0ZXIpCisgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtU3luY0ZyYW1lUGVyaW9kLCBDMl9QQVJBTUtFWV9TWU5DX0ZSQU1FX0lOVEVSVkFMKQorICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVN5bmNGcmFtZUludGVydmFsVHVuaW5nOjpvdXRwdXQoMHUsIDEwMDAwMDApKQorICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtU3luY0ZyYW1lUGVyaW9kLCB2YWx1ZSkuYW55KCl9KQorICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptU3luY0ZyYW1lUGVyaW9kKT46OlN0cmljdFZhbHVlV2l0aE5vRGVwcykKKyAgICAgICAgICAgIC5idWlsZCgpKTsKKworICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgRGVmaW5lUGFyYW0obUJpdHJhdGUsIEMyX1BBUkFNS0VZX0JJVFJBVEUpCisgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtQml0cmF0ZUluZm86Om91dHB1dCgwdSwgNjQwMDApKQorICAgICAgICAgICAgLndpdGhGaWVsZHMoe0MyRihtQml0cmF0ZSwgdmFsdWUpLmluUmFuZ2UoNDA5NiwgNDAwMDAwMDApfSkKKyAgICAgICAgICAgIC53aXRoU2V0dGVyKEJpdHJhdGVTZXR0ZXIpCisgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtSW50cmFSZWZyZXNoLCBDMl9QQVJBTUtFWV9JTlRSQV9SRUZSRVNIKQorICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbUludHJhUmVmcmVzaFR1bmluZzo6b3V0cHV0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB1LCBDMkNvbmZpZzo6SU5UUkFfUkVGUkVTSF9ESVNBQkxFRCwgMC4pKQorICAgICAgICAgICAgLmJ1aWxkKCkpOworI2lmZGVmIFZQOQorICAgIGFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgIERlZmluZVBhcmFtKG1Qcm9maWxlTGV2ZWwsIEMyX1BBUkFNS0VZX1BST0ZJTEVfTEVWRUwpCisgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6b3V0cHV0KAorICAgICAgICAgICAgICAgICAgICAwdSwgUFJPRklMRV9WUDlfMCwgTEVWRUxfVlA5XzRfMSkpCisgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgQzJGKG1Qcm9maWxlTGV2ZWwsIHByb2ZpbGUpLmVxdWFsVG8oCisgICAgICAgICAgICAgICAgICAgIFBST0ZJTEVfVlA5XzAKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgIEMyRihtUHJvZmlsZUxldmVsLCBsZXZlbCkuZXF1YWxUbygKKyAgICAgICAgICAgICAgICAgICAgTEVWRUxfVlA5XzRfMSksCisgICAgICAgICAgICB9KQorICAgICAgICAgICAgLndpdGhTZXR0ZXIoUHJvZmlsZUxldmVsU2V0dGVyKQorICAgICAgICAgICAgLmJ1aWxkKCkpOworI2Vsc2UKKyAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtUHJvZmlsZUxldmVsLCBDMl9QQVJBTUtFWV9QUk9GSUxFX0xFVkVMKQorICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86Om91dHB1dCgKKyAgICAgICAgICAgICAgICAgICAgMHUsIFBST0ZJTEVfVlA4XzAsIExFVkVMX1VOVVNFRCkpCisgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgQzJGKG1Qcm9maWxlTGV2ZWwsIHByb2ZpbGUpLmVxdWFsVG8oCisgICAgICAgICAgICAgICAgICAgIFBST0ZJTEVfVlA4XzAKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgIEMyRihtUHJvZmlsZUxldmVsLCBsZXZlbCkuZXF1YWxUbygKKyAgICAgICAgICAgICAgICAgICAgTEVWRUxfVU5VU0VEKSwKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICAud2l0aFNldHRlcihQcm9maWxlTGV2ZWxTZXR0ZXIpCisgICAgICAgICAgICAuYnVpbGQoKSk7CisjZW5kaWYKKyAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtUmVxdWVzdFN5bmMsIEMyX1BBUkFNS0VZX1JFUVVFU1RfU1lOQ19GUkFNRSkKKyAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1SZXF1ZXN0U3luY0ZyYW1lVHVuaW5nOjpvdXRwdXQoMHUsIEMyX0ZBTFNFKSkKKyAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobVJlcXVlc3RTeW5jLCB2YWx1ZSkub25lT2YoeyBDMl9GQUxTRSwgQzJfVFJVRSB9KSB9KQorICAgICAgICAgICAgLndpdGhTZXR0ZXIoU2V0dGVyPGRlY2x0eXBlKCptUmVxdWVzdFN5bmMpPjo6Tm9uU3RyaWN0VmFsdWVXaXRoTm9EZXBzKQorICAgICAgICAgICAgLmJ1aWxkKCkpOworCisgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgRGVmaW5lUGFyYW0obUNvbG9yQXNwZWN0cywgQzJfUEFSQU1LRVlfQ09MT1JfQVNQRUNUUykKKyAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjppbnB1dCgKKyAgICAgICAgICAgICAgICAgICAgMHUsIEMyQ29sb3I6OlJBTkdFX1VOU1BFQ0lGSUVELCBDMkNvbG9yOjpQUklNQVJJRVNfVU5TUEVDSUZJRUQsCisgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlRSQU5TRkVSX1VOU1BFQ0lGSUVELCBDMkNvbG9yOjpNQVRSSVhfVU5TUEVDSUZJRUQpKQorICAgICAgICAgICAgLndpdGhGaWVsZHMoeworICAgICAgICAgICAgICAgIEMyRihtQ29sb3JBc3BlY3RzLCByYW5nZSkuaW5SYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpSQU5HRV9VTlNQRUNJRklFRCwgICAgIEMyQ29sb3I6OlJBTkdFX09USEVSKSwKKyAgICAgICAgICAgICAgICBDMkYobUNvbG9yQXNwZWN0cywgcHJpbWFyaWVzKS5pblJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlBSSU1BUklFU19VTlNQRUNJRklFRCwgQzJDb2xvcjo6UFJJTUFSSUVTX09USEVSKSwKKyAgICAgICAgICAgICAgICBDMkYobUNvbG9yQXNwZWN0cywgdHJhbnNmZXIpLmluUmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6VFJBTlNGRVJfVU5TUEVDSUZJRUQsICBDMkNvbG9yOjpUUkFOU0ZFUl9PVEhFUiksCisgICAgICAgICAgICAgICAgQzJGKG1Db2xvckFzcGVjdHMsIG1hdHJpeCkuaW5SYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpNQVRSSVhfVU5TUEVDSUZJRUQsICAgIEMyQ29sb3I6Ok1BVFJJWF9PVEhFUikKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICAud2l0aFNldHRlcihDb2xvckFzcGVjdHNTZXR0ZXIpCisgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICBhZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICBEZWZpbmVQYXJhbShtQ29kZWRDb2xvckFzcGVjdHMsIEMyX1BBUkFNS0VZX1ZVSV9DT0xPUl9BU1BFQ1RTKQorICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86Om91dHB1dCgKKyAgICAgICAgICAgICAgICAgICAgMHUsIEMyQ29sb3I6OlJBTkdFX0xJTUlURUQsIEMyQ29sb3I6OlBSSU1BUklFU19VTlNQRUNJRklFRCwKKyAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6VFJBTlNGRVJfVU5TUEVDSUZJRUQsIEMyQ29sb3I6Ok1BVFJJWF9VTlNQRUNJRklFRCkpCisgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgQzJGKG1Db2RlZENvbG9yQXNwZWN0cywgcmFuZ2UpLmluUmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6UkFOR0VfVU5TUEVDSUZJRUQsICAgICBDMkNvbG9yOjpSQU5HRV9PVEhFUiksCisgICAgICAgICAgICAgICAgQzJGKG1Db2RlZENvbG9yQXNwZWN0cywgcHJpbWFyaWVzKS5pblJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlBSSU1BUklFU19VTlNQRUNJRklFRCwgQzJDb2xvcjo6UFJJTUFSSUVTX09USEVSKSwKKyAgICAgICAgICAgICAgICBDMkYobUNvZGVkQ29sb3JBc3BlY3RzLCB0cmFuc2ZlcikuaW5SYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpUUkFOU0ZFUl9VTlNQRUNJRklFRCwgIEMyQ29sb3I6OlRSQU5TRkVSX09USEVSKSwKKyAgICAgICAgICAgICAgICBDMkYobUNvZGVkQ29sb3JBc3BlY3RzLCBtYXRyaXgpLmluUmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6TUFUUklYX1VOU1BFQ0lGSUVELCAgICBDMkNvbG9yOjpNQVRSSVhfT1RIRVIpCisgICAgICAgICAgICB9KQorICAgICAgICAgICAgLndpdGhTZXR0ZXIoQ29kZWRDb2xvckFzcGVjdHNTZXR0ZXIsIG1Db2xvckFzcGVjdHMpCisgICAgICAgICAgICAuYnVpbGQoKSk7Cit9CisKK0MyUiBDMlNvZnRWcHhFbmM6OkludGZJbXBsOjpCaXRyYXRlU2V0dGVyKGJvb2wgbWF5QmxvY2ssIEMyUDxDMlN0cmVhbUJpdHJhdGVJbmZvOjpvdXRwdXQ+ICZtZSkgeworICAgICh2b2lkKW1heUJsb2NrOworICAgIEMyUiByZXMgPSBDMlI6Ok9rKCk7CisgICAgaWYgKG1lLnYudmFsdWUgPCA0MDk2KSB7CisgICAgICAgIG1lLnNldCgpLnZhbHVlID0gNDA5NjsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworQzJSIEMyU29mdFZweEVuYzo6SW50ZkltcGw6OlNpemVTZXR0ZXIoYm9vbCBtYXlCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEMyUDxDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6aW5wdXQ+JiBvbGRNZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyUDxDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6aW5wdXQ+JiBtZSkgeworICAgICh2b2lkKW1heUJsb2NrOworICAgIEMyUiByZXMgPSBDMlI6Ok9rKCk7CisgICAgaWYgKCFtZS5GKG1lLnYud2lkdGgpLnN1cHBvcnRzQXRBbGwobWUudi53aWR0aCkpIHsKKyAgICAgICAgcmVzID0gcmVzLnBsdXMoQzJTZXR0aW5nUmVzdWx0QnVpbGRlcjo6QmFkVmFsdWUobWUuRihtZS52LndpZHRoKSkpOworICAgICAgICBtZS5zZXQoKS53aWR0aCA9IG9sZE1lLnYud2lkdGg7CisgICAgfQorICAgIGlmICghbWUuRihtZS52LmhlaWdodCkuc3VwcG9ydHNBdEFsbChtZS52LmhlaWdodCkpIHsKKyAgICAgICAgcmVzID0gcmVzLnBsdXMoQzJTZXR0aW5nUmVzdWx0QnVpbGRlcjo6QmFkVmFsdWUobWUuRihtZS52LmhlaWdodCkpKTsKKyAgICAgICAgbWUuc2V0KCkuaGVpZ2h0ID0gb2xkTWUudi5oZWlnaHQ7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKK0MyUiBDMlNvZnRWcHhFbmM6OkludGZJbXBsOjpQcm9maWxlTGV2ZWxTZXR0ZXIoYm9vbCBtYXlCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJQPEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6b3V0cHV0PiYgbWUpIHsKKyAgICAodm9pZCltYXlCbG9jazsKKyAgICBpZiAoIW1lLkYobWUudi5wcm9maWxlKS5zdXBwb3J0c0F0QWxsKG1lLnYucHJvZmlsZSkpIHsKKyAgICAgICAgbWUuc2V0KCkucHJvZmlsZSA9IFBST0ZJTEVfVlA5XzA7CisgICAgfQorICAgIGlmICghbWUuRihtZS52LmxldmVsKS5zdXBwb3J0c0F0QWxsKG1lLnYubGV2ZWwpKSB7CisgICAgICAgIG1lLnNldCgpLmxldmVsID0gTEVWRUxfVlA5XzRfMTsKKyAgICB9CisgICAgcmV0dXJuIEMyUjo6T2soKTsKK30KKworQzJSIEMyU29mdFZweEVuYzo6SW50ZkltcGw6OkxheWVyaW5nU2V0dGVyKGJvb2wgbWF5QmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJQPEMyU3RyZWFtVGVtcG9yYWxMYXllcmluZ1R1bmluZzo6b3V0cHV0PiYgbWUpIHsKKyAgICAodm9pZCltYXlCbG9jazsKKyAgICBDMlIgcmVzID0gQzJSOjpPaygpOworICAgIGlmIChtZS52Lm0ubGF5ZXJDb3VudCA+IDQpIHsKKyAgICAgICAgbWUuc2V0KCkubS5sYXllckNvdW50ID0gNDsKKyAgICB9CisgICAgbWUuc2V0KCkubS5iTGF5ZXJDb3VudCA9IDA7CisgICAgLy8gZW5zdXJlIHJhdGlvcyBhcmUgbW9ub3RvbmljIGFuZCBjbGFtcGVkIGJldHdlZW4gMCBhbmQgMQorICAgIGZvciAoc2l6ZV90IGl4ID0gMDsgaXggPCBtZS52LmZsZXhDb3VudCgpOyArK2l4KSB7CisgICAgICAgIG1lLnNldCgpLm0uYml0cmF0ZVJhdGlvc1tpeF0gPSBjMl9jbGFtcCgKKyAgICAgICAgICAgIGl4ID4gMCA/IG1lLnYubS5iaXRyYXRlUmF0aW9zW2l4IC0gMV0gOiAwLCBtZS52Lm0uYml0cmF0ZVJhdGlvc1tpeF0sIDEuKTsKKyAgICB9CisgICAgQUxPR0koInNldHRpbmcgdGVtcG9yYWwgbGF5ZXJpbmcgJXUgKyAldSIsIG1lLnYubS5sYXllckNvdW50LCBtZS52Lm0uYkxheWVyQ291bnQpOworICAgIHJldHVybiByZXM7Cit9CisKK3VpbnQzMl90IEMyU29mdFZweEVuYzo6SW50ZkltcGw6OmdldFN5bmNGcmFtZVBlcmlvZCgpIGNvbnN0IHsKKyAgICBpZiAobVN5bmNGcmFtZVBlcmlvZC0+dmFsdWUgPCAwIHx8IG1TeW5jRnJhbWVQZXJpb2QtPnZhbHVlID09IElOVDY0X01BWCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZG91YmxlIHBlcmlvZCA9IG1TeW5jRnJhbWVQZXJpb2QtPnZhbHVlIC8gMWU2ICogbUZyYW1lUmF0ZS0+dmFsdWU7CisgICAgcmV0dXJuICh1aW50MzJfdCljMl9tYXgoYzJfbWluKHBlcmlvZCArIDAuNSwgZG91YmxlKFVJTlQzMl9NQVgpKSwgMS4pOworfQorQzJSIEMyU29mdFZweEVuYzo6SW50ZkltcGw6OkNvbG9yQXNwZWN0c1NldHRlcihib29sIG1heUJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMlA8QzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjppbnB1dD4mIG1lKSB7CisgICAgKHZvaWQpbWF5QmxvY2s7CisgICAgaWYgKG1lLnYucmFuZ2UgPiBDMkNvbG9yOjpSQU5HRV9PVEhFUikgeworICAgICAgICAgICAgbWUuc2V0KCkucmFuZ2UgPSBDMkNvbG9yOjpSQU5HRV9PVEhFUjsKKyAgICB9CisgICAgaWYgKG1lLnYucHJpbWFyaWVzID4gQzJDb2xvcjo6UFJJTUFSSUVTX09USEVSKSB7CisgICAgICAgICAgICBtZS5zZXQoKS5wcmltYXJpZXMgPSBDMkNvbG9yOjpQUklNQVJJRVNfT1RIRVI7CisgICAgfQorICAgIGlmIChtZS52LnRyYW5zZmVyID4gQzJDb2xvcjo6VFJBTlNGRVJfT1RIRVIpIHsKKyAgICAgICAgICAgIG1lLnNldCgpLnRyYW5zZmVyID0gQzJDb2xvcjo6VFJBTlNGRVJfT1RIRVI7CisgICAgfQorICAgIGlmIChtZS52Lm1hdHJpeCA+IEMyQ29sb3I6Ok1BVFJJWF9PVEhFUikgeworICAgICAgICAgICAgbWUuc2V0KCkubWF0cml4ID0gQzJDb2xvcjo6TUFUUklYX09USEVSOworICAgIH0KKyAgICByZXR1cm4gQzJSOjpPaygpOworfQorQzJSIEMyU29mdFZweEVuYzo6SW50ZkltcGw6OkNvZGVkQ29sb3JBc3BlY3RzU2V0dGVyKAorICAgICAgICBib29sIG1heUJsb2NrLCBDMlA8QzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjpvdXRwdXQ+JiBtZSwKKyAgICAgICAgY29uc3QgQzJQPEMyU3RyZWFtQ29sb3JBc3BlY3RzSW5mbzo6aW5wdXQ+JiBjb2RlZCkgeworICAgICh2b2lkKW1heUJsb2NrOworICAgIG1lLnNldCgpLnJhbmdlID0gY29kZWQudi5yYW5nZTsKKyAgICBtZS5zZXQoKS5wcmltYXJpZXMgPSBjb2RlZC52LnByaW1hcmllczsKKyAgICBtZS5zZXQoKS50cmFuc2ZlciA9IGNvZGVkLnYudHJhbnNmZXI7CisgICAgbWUuc2V0KCkubWF0cml4ID0gY29kZWQudi5tYXRyaXg7CisgICAgcmV0dXJuIEMyUjo6T2soKTsKK30KKwogI2lmIDAKIHN0YXRpYyBzaXplX3QgZ2V0Q3B1Q29yZUNvdW50KCkgewogICAgIGxvbmcgY3B1Q29yZUNvdW50ID0gMTsKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZweC9DMlNvZnRWcHhFbmMuaCBiL21lZGlhL2NvZGVjMi9jb21wb25lbnRzL3ZweC9DMlNvZnRWcHhFbmMuaAppbmRleCBjOThiODAyLi5lMjk2YzhmIDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvY29tcG9uZW50cy92cHgvQzJTb2Z0VnB4RW5jLmgKKysrIGIvbWVkaWEvY29kZWMyL2NvbXBvbmVudHMvdnB4L0MyU29mdFZweEVuYy5oCkBAIC0yMzcsMjQ1ICsyMzcsMzggQEAKIAogY2xhc3MgQzJTb2Z0VnB4RW5jOjpJbnRmSW1wbCA6IHB1YmxpYyBTaW1wbGVJbnRlcmZhY2U8dm9pZD46OkJhc2VQYXJhbXMgewogICAgcHVibGljOgotICAgIGV4cGxpY2l0IEludGZJbXBsKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMlJlZmxlY3RvckhlbHBlcj4gJmhlbHBlcikKLSAgICAgICAgOiBTaW1wbGVJbnRlcmZhY2U8dm9pZD46OkJhc2VQYXJhbXMoCi0gICAgICAgICAgICAgICAgaGVscGVyLAotICAgICAgICAgICAgICAgIENPTVBPTkVOVF9OQU1FLAotICAgICAgICAgICAgICAgIEMyQ29tcG9uZW50OjpLSU5EX0VOQ09ERVIsCi0gICAgICAgICAgICAgICAgQzJDb21wb25lbnQ6OkRPTUFJTl9WSURFTywKLSAgICAgICAgICAgICAgICBNRURJQV9NSU1FVFlQRV9WSURFTykgewotICAgICAgICBub1ByaXZhdGVCdWZmZXJzKCk7IC8vIFRPRE86IGFjY291bnQgZm9yIG91ciBidWZmZXJzIGhlcmUKLSAgICAgICAgbm9JbnB1dFJlZmVyZW5jZXMoKTsKLSAgICAgICAgbm9PdXRwdXRSZWZlcmVuY2VzKCk7Ci0gICAgICAgIG5vSW5wdXRMYXRlbmN5KCk7Ci0gICAgICAgIG5vVGltZVN0cmV0Y2goKTsKLSAgICAgICAgc2V0RGVyaXZlZEluc3RhbmNlKHRoaXMpOwotCi0gICAgICAgIGFkZFBhcmFtZXRlcigKLSAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtQXR0cmliLCBDMl9QQVJBTUtFWV9DT01QT05FTlRfQVRUUklCVVRFUykKLSAgICAgICAgICAgICAgICAud2l0aENvbnN0VmFsdWUobmV3IEMyQ29tcG9uZW50QXR0cmlidXRlc1NldHRpbmcoCi0gICAgICAgICAgICAgICAgICAgIEMyQ29tcG9uZW50OjpBVFRSSUJfSVNfVEVNUE9SQUwpKQotICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKLQotICAgICAgICBhZGRQYXJhbWV0ZXIoCi0gICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obVVzYWdlLCBDMl9QQVJBTUtFWV9JTlBVVF9TVFJFQU1fVVNBR0UpCi0gICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbVVzYWdlVHVuaW5nOjppbnB1dCgKLSAgICAgICAgICAgICAgICAgICAgICAgIDB1LCAodWludDY0X3QpQzJNZW1vcnlVc2FnZTo6Q1BVX1JFQUQpKQotICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKLQotICAgICAgICBhZGRQYXJhbWV0ZXIoCi0gICAgICAgICAgICBEZWZpbmVQYXJhbShtU2l6ZSwgQzJfUEFSQU1LRVlfUElDVFVSRV9TSVpFKQotICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1QaWN0dXJlU2l6ZUluZm86OmlucHV0KDB1LCAzMjAsIDI0MCkpCi0gICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoewotICAgICAgICAgICAgICAgICAgICBDMkYobVNpemUsIHdpZHRoKS5pblJhbmdlKDIsIDIwNDgsIDIpLAotICAgICAgICAgICAgICAgICAgICBDMkYobVNpemUsIGhlaWdodCkuaW5SYW5nZSgyLCAyMDQ4LCAyKSwKLSAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFNpemVTZXR0ZXIpCi0gICAgICAgICAgICAgICAgLmJ1aWxkKCkpOwotCi0gICAgICAgIGFkZFBhcmFtZXRlcigKLSAgICAgICAgICAgIERlZmluZVBhcmFtKG1CaXRyYXRlTW9kZSwgQzJfUEFSQU1LRVlfQklUUkFURV9NT0RFKQotICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1CaXRyYXRlTW9kZVR1bmluZzo6b3V0cHV0KAotICAgICAgICAgICAgICAgICAgICAgICAgMHUsIEMyQ29uZmlnOjpCSVRSQVRFX1ZBUklBQkxFKSkKLSAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7Ci0gICAgICAgICAgICAgICAgICAgIEMyRihtQml0cmF0ZU1vZGUsIHZhbHVlKS5vbmVPZih7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDMkNvbmZpZzo6QklUUkFURV9DT05TVCwgQzJDb25maWc6OkJJVFJBVEVfVkFSSUFCTEUgfSkKLSAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKAotICAgICAgICAgICAgICAgICAgICBTZXR0ZXI8ZGVjbHR5cGUoKm1CaXRyYXRlTW9kZSk+OjpTdHJpY3RWYWx1ZVdpdGhOb0RlcHMpCi0gICAgICAgICAgICAgICAgLmJ1aWxkKCkpOwotCi0gICAgICAgIGFkZFBhcmFtZXRlcigKLSAgICAgICAgICAgIERlZmluZVBhcmFtKG1GcmFtZVJhdGUsIEMyX1BBUkFNS0VZX0ZSQU1FX1JBVEUpCi0gICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbUZyYW1lUmF0ZUluZm86Om91dHB1dCgwdSwgMzAuKSkKLSAgICAgICAgICAgICAgICAvLyBUT0RPOiBNb3JlIHJlc3RyaWN0aW9uPwotICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobUZyYW1lUmF0ZSwgdmFsdWUpLmdyZWF0ZXJUaGFuKDAuKX0pCi0gICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoCi0gICAgICAgICAgICAgICAgICAgIFNldHRlcjxkZWNsdHlwZSgqbUZyYW1lUmF0ZSk+OjpTdHJpY3RWYWx1ZVdpdGhOb0RlcHMpCi0gICAgICAgICAgICAgICAgLmJ1aWxkKCkpOwotCi0gICAgICAgIGFkZFBhcmFtZXRlcigKLSAgICAgICAgICAgIERlZmluZVBhcmFtKG1MYXllcmluZywgQzJfUEFSQU1LRVlfVEVNUE9SQUxfTEFZRVJJTkcpCi0gICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KEMyU3RyZWFtVGVtcG9yYWxMYXllcmluZ1R1bmluZzo6b3V0cHV0OjpBbGxvY1NoYXJlZCgwdSwgMCwgMCwgMCkpCi0gICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoewotICAgICAgICAgICAgICAgICAgICBDMkYobUxheWVyaW5nLCBtLmxheWVyQ291bnQpLmluUmFuZ2UoMCwgNCksCi0gICAgICAgICAgICAgICAgICAgIEMyRihtTGF5ZXJpbmcsIG0uYkxheWVyQ291bnQpLmluUmFuZ2UoMCwgMCksCi0gICAgICAgICAgICAgICAgICAgIEMyRihtTGF5ZXJpbmcsIG0uYml0cmF0ZVJhdGlvcykuaW5SYW5nZSgwLiwgMS4pCi0gICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgICAud2l0aFNldHRlcihMYXllcmluZ1NldHRlcikKLSAgICAgICAgICAgICAgICAuYnVpbGQoKSk7Ci0KLSAgICAgICAgYWRkUGFyYW1ldGVyKAotICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1TeW5jRnJhbWVQZXJpb2QsIEMyX1BBUkFNS0VZX1NZTkNfRlJBTUVfSU5URVJWQUwpCi0gICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVN5bmNGcmFtZUludGVydmFsVHVuaW5nOjpvdXRwdXQoMHUsIDEwMDAwMDApKQotICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobVN5bmNGcmFtZVBlcmlvZCwgdmFsdWUpLmFueSgpfSkKLSAgICAgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8ZGVjbHR5cGUoKm1TeW5jRnJhbWVQZXJpb2QpPjo6U3RyaWN0VmFsdWVXaXRoTm9EZXBzKQotICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKLQotICAgICAgICBhZGRQYXJhbWV0ZXIoCi0gICAgICAgICAgICBEZWZpbmVQYXJhbShtQml0cmF0ZSwgQzJfUEFSQU1LRVlfQklUUkFURSkKLSAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtQml0cmF0ZUluZm86Om91dHB1dCgwdSwgNjQwMDApKQotICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHtDMkYobUJpdHJhdGUsIHZhbHVlKS5pblJhbmdlKDQwOTYsIDQwMDAwMDAwKX0pCi0gICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoQml0cmF0ZVNldHRlcikKLSAgICAgICAgICAgICAgICAuYnVpbGQoKSk7Ci0KLSAgICAgICAgYWRkUGFyYW1ldGVyKAotICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1JbnRyYVJlZnJlc2gsIEMyX1BBUkFNS0VZX0lOVFJBX1JFRlJFU0gpCi0gICAgICAgICAgICAgICAgLndpdGhDb25zdFZhbHVlKG5ldyBDMlN0cmVhbUludHJhUmVmcmVzaFR1bmluZzo6b3V0cHV0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwdSwgQzJDb25maWc6OklOVFJBX1JFRlJFU0hfRElTQUJMRUQsIDAuKSkKLSAgICAgICAgICAgICAgICAuYnVpbGQoKSk7Ci0KLSAgICAgICAgYWRkUGFyYW1ldGVyKAotICAgICAgICBEZWZpbmVQYXJhbShtUHJvZmlsZUxldmVsLCBDMl9QQVJBTUtFWV9QUk9GSUxFX0xFVkVMKQotICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6b3V0cHV0KAotICAgICAgICAgICAgICAgIDB1LCBQUk9GSUxFX1ZQOV8wLCBMRVZFTF9WUDlfNF8xKSkKLSAgICAgICAgLndpdGhGaWVsZHMoewotICAgICAgICAgICAgQzJGKG1Qcm9maWxlTGV2ZWwsIHByb2ZpbGUpLmVxdWFsVG8oCi0gICAgICAgICAgICAgICAgUFJPRklMRV9WUDlfMAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgIEMyRihtUHJvZmlsZUxldmVsLCBsZXZlbCkuZXF1YWxUbygKLSAgICAgICAgICAgICAgICBMRVZFTF9WUDlfNF8xKSwKLSAgICAgICAgfSkKLSAgICAgICAgLndpdGhTZXR0ZXIoUHJvZmlsZUxldmVsU2V0dGVyKQotICAgICAgICAuYnVpbGQoKSk7Ci0KLSAgICAgICAgYWRkUGFyYW1ldGVyKAotICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1SZXF1ZXN0U3luYywgQzJfUEFSQU1LRVlfUkVRVUVTVF9TWU5DX0ZSQU1FKQotICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1SZXF1ZXN0U3luY0ZyYW1lVHVuaW5nOjpvdXRwdXQoMHUsIEMyX0ZBTFNFKSkKLSAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7QzJGKG1SZXF1ZXN0U3luYywgdmFsdWUpLm9uZU9mKHsgQzJfRkFMU0UsIEMyX1RSVUUgfSkgfSkKLSAgICAgICAgICAgICAgICAud2l0aFNldHRlcihTZXR0ZXI8ZGVjbHR5cGUoKm1SZXF1ZXN0U3luYyk+OjpOb25TdHJpY3RWYWx1ZVdpdGhOb0RlcHMpCi0gICAgICAgICAgICAgICAgLmJ1aWxkKCkpOwotCi0gICAgICAgIGFkZFBhcmFtZXRlcigKLSAgICAgICAgICAgICAgICBEZWZpbmVQYXJhbShtQ29sb3JBc3BlY3RzLCBDMl9QQVJBTUtFWV9DT0xPUl9BU1BFQ1RTKQotICAgICAgICAgICAgICAgIC53aXRoRGVmYXVsdChuZXcgQzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjppbnB1dCgKLSAgICAgICAgICAgICAgICAgICAgICAgIDB1LCBDMkNvbG9yOjpSQU5HRV9VTlNQRUNJRklFRCwgQzJDb2xvcjo6UFJJTUFSSUVTX1VOU1BFQ0lGSUVELAotICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6VFJBTlNGRVJfVU5TUEVDSUZJRUQsIEMyQ29sb3I6Ok1BVFJJWF9VTlNQRUNJRklFRCkpCi0gICAgICAgICAgICAgICAgLndpdGhGaWVsZHMoewotICAgICAgICAgICAgICAgICAgICBDMkYobUNvbG9yQXNwZWN0cywgcmFuZ2UpLmluUmFuZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlJBTkdFX1VOU1BFQ0lGSUVELCAgICAgQzJDb2xvcjo6UkFOR0VfT1RIRVIpLAotICAgICAgICAgICAgICAgICAgICBDMkYobUNvbG9yQXNwZWN0cywgcHJpbWFyaWVzKS5pblJhbmdlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMkNvbG9yOjpQUklNQVJJRVNfVU5TUEVDSUZJRUQsIEMyQ29sb3I6OlBSSU1BUklFU19PVEhFUiksCi0gICAgICAgICAgICAgICAgICAgIEMyRihtQ29sb3JBc3BlY3RzLCB0cmFuc2ZlcikuaW5SYW5nZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJDb2xvcjo6VFJBTlNGRVJfVU5TUEVDSUZJRUQsICBDMkNvbG9yOjpUUkFOU0ZFUl9PVEhFUiksCi0gICAgICAgICAgICAgICAgICAgIEMyRihtQ29sb3JBc3BlY3RzLCBtYXRyaXgpLmluUmFuZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6Ok1BVFJJWF9VTlNQRUNJRklFRCwgICAgQzJDb2xvcjo6TUFUUklYX09USEVSKQotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoQ29sb3JBc3BlY3RzU2V0dGVyKQotICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKLQotICAgICAgICBhZGRQYXJhbWV0ZXIoCi0gICAgICAgICAgICAgICAgRGVmaW5lUGFyYW0obUNvZGVkQ29sb3JBc3BlY3RzLCBDMl9QQVJBTUtFWV9WVUlfQ09MT1JfQVNQRUNUUykKLSAgICAgICAgICAgICAgICAud2l0aERlZmF1bHQobmV3IEMyU3RyZWFtQ29sb3JBc3BlY3RzSW5mbzo6b3V0cHV0KAotICAgICAgICAgICAgICAgICAgICAgICAgMHUsIEMyQ29sb3I6OlJBTkdFX0xJTUlURUQsIEMyQ29sb3I6OlBSSU1BUklFU19VTlNQRUNJRklFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlRSQU5TRkVSX1VOU1BFQ0lGSUVELCBDMkNvbG9yOjpNQVRSSVhfVU5TUEVDSUZJRUQpKQotICAgICAgICAgICAgICAgIC53aXRoRmllbGRzKHsKLSAgICAgICAgICAgICAgICAgICAgQzJGKG1Db2RlZENvbG9yQXNwZWN0cywgcmFuZ2UpLmluUmFuZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlJBTkdFX1VOU1BFQ0lGSUVELCAgICAgQzJDb2xvcjo6UkFOR0VfT1RIRVIpLAotICAgICAgICAgICAgICAgICAgICBDMkYobUNvZGVkQ29sb3JBc3BlY3RzLCBwcmltYXJpZXMpLmluUmFuZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlBSSU1BUklFU19VTlNQRUNJRklFRCwgQzJDb2xvcjo6UFJJTUFSSUVTX09USEVSKSwKLSAgICAgICAgICAgICAgICAgICAgQzJGKG1Db2RlZENvbG9yQXNwZWN0cywgdHJhbnNmZXIpLmluUmFuZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6OlRSQU5TRkVSX1VOU1BFQ0lGSUVELCAgQzJDb2xvcjo6VFJBTlNGRVJfT1RIRVIpLAotICAgICAgICAgICAgICAgICAgICBDMkYobUNvZGVkQ29sb3JBc3BlY3RzLCBtYXRyaXgpLmluUmFuZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyQ29sb3I6Ok1BVFJJWF9VTlNQRUNJRklFRCwgICAgQzJDb2xvcjo6TUFUUklYX09USEVSKQotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgLndpdGhTZXR0ZXIoQ29kZWRDb2xvckFzcGVjdHNTZXR0ZXIsIG1Db2xvckFzcGVjdHMpCi0gICAgICAgICAgICAgICAgLmJ1aWxkKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBDMlIgQml0cmF0ZVNldHRlcihib29sIG1heUJsb2NrLCBDMlA8QzJTdHJlYW1CaXRyYXRlSW5mbzo6b3V0cHV0PiAmbWUpIHsKLSAgICAgICAgKHZvaWQpbWF5QmxvY2s7Ci0gICAgICAgIEMyUiByZXMgPSBDMlI6Ok9rKCk7Ci0gICAgICAgIGlmIChtZS52LnZhbHVlIDw9IDQwOTYpIHsKLSAgICAgICAgICAgIG1lLnNldCgpLnZhbHVlID0gNDA5NjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzOwotICAgIH0KKyAgICBleHBsaWNpdCBJbnRmSW1wbChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJSZWZsZWN0b3JIZWxwZXI+ICZoZWxwZXIpOworICAgIHN0YXRpYyBDMlIgQml0cmF0ZVNldHRlcihib29sIG1heUJsb2NrLCBDMlA8QzJTdHJlYW1CaXRyYXRlSW5mbzo6b3V0cHV0PiAmbWUpOwogCiAgICAgc3RhdGljIEMyUiBTaXplU2V0dGVyKGJvb2wgbWF5QmxvY2ssIGNvbnN0IEMyUDxDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6aW5wdXQ+ICZvbGRNZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQzJQPEMyU3RyZWFtUGljdHVyZVNpemVJbmZvOjppbnB1dD4gJm1lKSB7Ci0gICAgICAgICh2b2lkKW1heUJsb2NrOwotICAgICAgICBDMlIgcmVzID0gQzJSOjpPaygpOwotICAgICAgICBpZiAoIW1lLkYobWUudi53aWR0aCkuc3VwcG9ydHNBdEFsbChtZS52LndpZHRoKSkgewotICAgICAgICAgICAgcmVzID0gcmVzLnBsdXMoQzJTZXR0aW5nUmVzdWx0QnVpbGRlcjo6QmFkVmFsdWUobWUuRihtZS52LndpZHRoKSkpOwotICAgICAgICAgICAgbWUuc2V0KCkud2lkdGggPSBvbGRNZS52LndpZHRoOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbWUuRihtZS52LmhlaWdodCkuc3VwcG9ydHNBdEFsbChtZS52LmhlaWdodCkpIHsKLSAgICAgICAgICAgIHJlcyA9IHJlcy5wbHVzKEMyU2V0dGluZ1Jlc3VsdEJ1aWxkZXI6OkJhZFZhbHVlKG1lLkYobWUudi5oZWlnaHQpKSk7Ci0gICAgICAgICAgICBtZS5zZXQoKS5oZWlnaHQgPSBvbGRNZS52LmhlaWdodDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzOwotICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQzJQPEMyU3RyZWFtUGljdHVyZVNpemVJbmZvOjppbnB1dD4gJm1lKTsKIAogICAgIHN0YXRpYyBDMlIgUHJvZmlsZUxldmVsU2V0dGVyKAogICAgICAgICAgICAgYm9vbCBtYXlCbG9jaywKLSAgICAgICAgICAgIEMyUDxDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86Om91dHB1dD4gJm1lKSB7Ci0gICAgICAgICh2b2lkKW1heUJsb2NrOwotICAgICAgICBpZiAoIW1lLkYobWUudi5wcm9maWxlKS5zdXBwb3J0c0F0QWxsKG1lLnYucHJvZmlsZSkpIHsKLSAgICAgICAgICAgIG1lLnNldCgpLnByb2ZpbGUgPSBQUk9GSUxFX1ZQOV8wOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbWUuRihtZS52LmxldmVsKS5zdXBwb3J0c0F0QWxsKG1lLnYubGV2ZWwpKSB7Ci0gICAgICAgICAgICBtZS5zZXQoKS5sZXZlbCA9IExFVkVMX1ZQOV80XzE7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEMyUjo6T2soKTsKLSAgICB9CisgICAgICAgICAgICBDMlA8QzJTdHJlYW1Qcm9maWxlTGV2ZWxJbmZvOjpvdXRwdXQ+ICZtZSk7CiAKLSAgICBzdGF0aWMgQzJSIExheWVyaW5nU2V0dGVyKGJvb2wgbWF5QmxvY2ssIEMyUDxDMlN0cmVhbVRlbXBvcmFsTGF5ZXJpbmdUdW5pbmc6Om91dHB1dD4mIG1lKSB7Ci0gICAgICAgICh2b2lkKW1heUJsb2NrOwotICAgICAgICBDMlIgcmVzID0gQzJSOjpPaygpOwotICAgICAgICBpZiAobWUudi5tLmxheWVyQ291bnQgPiA0KSB7Ci0gICAgICAgICAgICBtZS5zZXQoKS5tLmxheWVyQ291bnQgPSA0OwotICAgICAgICB9Ci0gICAgICAgIG1lLnNldCgpLm0uYkxheWVyQ291bnQgPSAwOwotICAgICAgICAvLyBlbnN1cmUgcmF0aW9zIGFyZSBtb25vdG9uaWMgYW5kIGNsYW1wZWQgYmV0d2VlbiAwIGFuZCAxCi0gICAgICAgIGZvciAoc2l6ZV90IGl4ID0gMDsgaXggPCBtZS52LmZsZXhDb3VudCgpOyArK2l4KSB7Ci0gICAgICAgICAgICBtZS5zZXQoKS5tLmJpdHJhdGVSYXRpb3NbaXhdID0gYzJfY2xhbXAoCi0gICAgICAgICAgICAgICAgaXggPiAwID8gbWUudi5tLmJpdHJhdGVSYXRpb3NbaXggLSAxXSA6IDAsIG1lLnYubS5iaXRyYXRlUmF0aW9zW2l4XSwgMS4pOwotICAgICAgICB9Ci0gICAgICAgIEFMT0dJKCJzZXR0aW5nIHRlbXBvcmFsIGxheWVyaW5nICV1ICsgJXUiLCBtZS52Lm0ubGF5ZXJDb3VudCwgbWUudi5tLmJMYXllckNvdW50KTsKLSAgICAgICAgcmV0dXJuIHJlczsKLSAgICB9CisgICAgc3RhdGljIEMyUiBMYXllcmluZ1NldHRlcihib29sIG1heUJsb2NrLCBDMlA8QzJTdHJlYW1UZW1wb3JhbExheWVyaW5nVHVuaW5nOjpvdXRwdXQ+JiBtZSk7CiAKICAgICAvLyB1bnNhZmUgZ2V0dGVycwogICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6aW5wdXQ+IGdldFNpemVfbCgpIGNvbnN0IHsgcmV0dXJuIG1TaXplOyB9Ci0gICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtSW50cmFSZWZyZXNoVHVuaW5nOjpvdXRwdXQ+IGdldEludHJhUmVmcmVzaF9sKCkgY29uc3QgeyByZXR1cm4gbUludHJhUmVmcmVzaDsgfQorICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUludHJhUmVmcmVzaFR1bmluZzo6b3V0cHV0PiBnZXRJbnRyYVJlZnJlc2hfbCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1JbnRyYVJlZnJlc2g7CisgICAgfQogICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUZyYW1lUmF0ZUluZm86Om91dHB1dD4gZ2V0RnJhbWVSYXRlX2woKSBjb25zdCB7IHJldHVybiBtRnJhbWVSYXRlOyB9CiAgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtQml0cmF0ZUluZm86Om91dHB1dD4gZ2V0Qml0cmF0ZV9sKCkgY29uc3QgeyByZXR1cm4gbUJpdHJhdGU7IH0KLSAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1CaXRyYXRlTW9kZVR1bmluZzo6b3V0cHV0PiBnZXRCaXRyYXRlTW9kZV9sKCkgY29uc3QgeyByZXR1cm4gbUJpdHJhdGVNb2RlOyB9Ci0gICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtUmVxdWVzdFN5bmNGcmFtZVR1bmluZzo6b3V0cHV0PiBnZXRSZXF1ZXN0U3luY19sKCkgY29uc3QgeyByZXR1cm4gbVJlcXVlc3RTeW5jOyB9Ci0gICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtVGVtcG9yYWxMYXllcmluZ1R1bmluZzo6b3V0cHV0PiBnZXRUZW1wb3JhbExheWVyc19sKCkgY29uc3QgeyByZXR1cm4gbUxheWVyaW5nOyB9Ci0gICAgdWludDMyX3QgZ2V0U3luY0ZyYW1lUGVyaW9kKCkgY29uc3QgewotICAgICAgICBpZiAobVN5bmNGcmFtZVBlcmlvZC0+dmFsdWUgPCAwIHx8IG1TeW5jRnJhbWVQZXJpb2QtPnZhbHVlID09IElOVDY0X01BWCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgZG91YmxlIHBlcmlvZCA9IG1TeW5jRnJhbWVQZXJpb2QtPnZhbHVlIC8gMWU2ICogbUZyYW1lUmF0ZS0+dmFsdWU7Ci0gICAgICAgIHJldHVybiAodWludDMyX3QpYzJfbWF4KGMyX21pbihwZXJpb2QgKyAwLjUsIGRvdWJsZShVSU5UMzJfTUFYKSksIDEuKTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1CaXRyYXRlTW9kZVR1bmluZzo6b3V0cHV0PiBnZXRCaXRyYXRlTW9kZV9sKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbUJpdHJhdGVNb2RlOwogICAgIH0KLSAgICBzdGF0aWMgQzJSIENvbG9yQXNwZWN0c1NldHRlcihib29sIG1heUJsb2NrLCBDMlA8QzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjppbnB1dD4gJm1lKSB7Ci0gICAgICAgICh2b2lkKW1heUJsb2NrOwotICAgICAgICBpZiAobWUudi5yYW5nZSA+IEMyQ29sb3I6OlJBTkdFX09USEVSKSB7Ci0gICAgICAgICAgICAgICAgbWUuc2V0KCkucmFuZ2UgPSBDMkNvbG9yOjpSQU5HRV9PVEhFUjsKLSAgICAgICAgfQotICAgICAgICBpZiAobWUudi5wcmltYXJpZXMgPiBDMkNvbG9yOjpQUklNQVJJRVNfT1RIRVIpIHsKLSAgICAgICAgICAgICAgICBtZS5zZXQoKS5wcmltYXJpZXMgPSBDMkNvbG9yOjpQUklNQVJJRVNfT1RIRVI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1lLnYudHJhbnNmZXIgPiBDMkNvbG9yOjpUUkFOU0ZFUl9PVEhFUikgewotICAgICAgICAgICAgICAgIG1lLnNldCgpLnRyYW5zZmVyID0gQzJDb2xvcjo6VFJBTlNGRVJfT1RIRVI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1lLnYubWF0cml4ID4gQzJDb2xvcjo6TUFUUklYX09USEVSKSB7Ci0gICAgICAgICAgICAgICAgbWUuc2V0KCkubWF0cml4ID0gQzJDb2xvcjo6TUFUUklYX09USEVSOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBDMlI6Ok9rKCk7CisgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtUmVxdWVzdFN5bmNGcmFtZVR1bmluZzo6b3V0cHV0PiBnZXRSZXF1ZXN0U3luY19sKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbVJlcXVlc3RTeW5jOwogICAgIH0KKyAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1UZW1wb3JhbExheWVyaW5nVHVuaW5nOjpvdXRwdXQ+IGdldFRlbXBvcmFsTGF5ZXJzX2woKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtTGF5ZXJpbmc7CisgICAgfQorICAgIHVpbnQzMl90IGdldFN5bmNGcmFtZVBlcmlvZCgpIGNvbnN0OworICAgIHN0YXRpYyBDMlIgQ29sb3JBc3BlY3RzU2V0dGVyKGJvb2wgbWF5QmxvY2ssIEMyUDxDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86OmlucHV0PiAmbWUpOwogICAgIHN0YXRpYyBDMlIgQ29kZWRDb2xvckFzcGVjdHNTZXR0ZXIoYm9vbCBtYXlCbG9jaywgQzJQPEMyU3RyZWFtQ29sb3JBc3BlY3RzSW5mbzo6b3V0cHV0PiAmbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDMlA8QzJTdHJlYW1Db2xvckFzcGVjdHNJbmZvOjppbnB1dD4gJmNvZGVkKSB7Ci0gICAgICAgICh2b2lkKW1heUJsb2NrOwotICAgICAgICBtZS5zZXQoKS5yYW5nZSA9IGNvZGVkLnYucmFuZ2U7Ci0gICAgICAgIG1lLnNldCgpLnByaW1hcmllcyA9IGNvZGVkLnYucHJpbWFyaWVzOwotICAgICAgICBtZS5zZXQoKS50cmFuc2ZlciA9IGNvZGVkLnYudHJhbnNmZXI7Ci0gICAgICAgIG1lLnNldCgpLm1hdHJpeCA9IGNvZGVkLnYubWF0cml4OwotICAgICAgICByZXR1cm4gQzJSOjpPaygpOwotICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEMyUDxDMlN0cmVhbUNvbG9yQXNwZWN0c0luZm86OmlucHV0PiAmY29kZWQpOwogCiAgICBwcml2YXRlOgogICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVVzYWdlVHVuaW5nOjppbnB1dD4gbVVzYWdlOwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2NvcmUvaW5jbHVkZS9DMkNvbmZpZy5oIGIvbWVkaWEvY29kZWMyL2NvcmUvaW5jbHVkZS9DMkNvbmZpZy5oCmluZGV4IDJjYzdhYjcuLmZlYWE5OGMgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9jb3JlL2luY2x1ZGUvQzJDb25maWcuaAorKysgYi9tZWRpYS9jb2RlYzIvY29yZS9pbmNsdWRlL0MyQ29uZmlnLmgKQEAgLTE2NzMsNyArMTY3Myw3IEBACiAgICAgU1lOQ19GUkFNRSA9ICgxIDw8IDApLCAgLy8vPCBzeW5jIGZyYW1lLCBlLmcuIElEUgogICAgIElfRlJBTUUgICAgPSAoMSA8PCAxKSwgIC8vLzwgaW50cmEgZnJhbWUgdGhhdCBpcyBjb21wbGV0ZWx5IGVuY29kZWQKICAgICBQX0ZSQU1FICAgID0gKDEgPDwgMiksICAvLy88IGludGVyIHByZWRpY3RlZCBmcmFtZSBmcm9tIHByZXZpb3VzIGZyYW1lcwotICAgIEJfRlJBTUUgICAgPSAoMSA8PCAzKSwgIC8vLzwgYmFja3dhcmQgcHJlZGljdGVkIChvdXQtb2Ytb3JkZXIpIGZyYW1lCisgICAgQl9GUkFNRSAgICA9ICgxIDw8IDMpLCAgLy8vPCBiaWRpcmVjdGlvbmFsIHByZWRpY3RlZCAob3V0LW9mLW9yZGVyKSBmcmFtZQogKQogCiAvKioKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9mdXp6ZXIvQzJGdXp6ZXIuY3BwIGIvbWVkaWEvY29kZWMyL2Z1enplci9DMkZ1enplci5jcHAKaW5kZXggNTFlMTAxMy4uZTQ2OWQ4YiAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWMyL2Z1enplci9DMkZ1enplci5jcHAKKysrIGIvbWVkaWEvY29kZWMyL2Z1enplci9DMkZ1enplci5jcHAKQEAgLTE5NCwxMiArMTk0LDEyIEBACiAgIH0KIAogICBzdGQ6OnZlY3RvcjxDMlBhcmFtKj4gY29uZmlnUGFyYW1zOworICBDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6aW5wdXQgaW5wdXRTaXplKDB1LCBrV2lkdGhPZlZpZGVvLCBrSGVpZ2h0T2ZWaWRlbyk7CisgIEMyU3RyZWFtU2FtcGxlUmF0ZUluZm86Om91dHB1dCBzYW1wbGVSYXRlSW5mbygwdSwga1NhbXBsaW5nUmF0ZU9mQXVkaW8pOworICBDMlN0cmVhbUNoYW5uZWxDb3VudEluZm86Om91dHB1dCBjaGFubmVsQ291bnRJbmZvKDB1LCBrQ2hhbm5lbHNPZkF1ZGlvKTsKICAgaWYgKGRvbWFpbi52YWx1ZSA9PSBET01BSU5fVklERU8pIHsKLSAgICBDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6aW5wdXQgaW5wdXRTaXplKDB1LCBrV2lkdGhPZlZpZGVvLCBrSGVpZ2h0T2ZWaWRlbyk7CiAgICAgY29uZmlnUGFyYW1zLnB1c2hfYmFjaygmaW5wdXRTaXplKTsKICAgfSBlbHNlIGlmIChkb21haW4udmFsdWUgPT0gRE9NQUlOX0FVRElPKSB7Ci0gICAgQzJTdHJlYW1TYW1wbGVSYXRlSW5mbzo6b3V0cHV0IHNhbXBsZVJhdGVJbmZvKDB1LCBrU2FtcGxpbmdSYXRlT2ZBdWRpbyk7Ci0gICAgQzJTdHJlYW1DaGFubmVsQ291bnRJbmZvOjpvdXRwdXQgY2hhbm5lbENvdW50SW5mbygwdSwga0NoYW5uZWxzT2ZBdWRpbyk7CiAgICAgY29uZmlnUGFyYW1zLnB1c2hfYmFjaygmc2FtcGxlUmF0ZUluZm8pOwogICAgIGNvbmZpZ1BhcmFtcy5wdXNoX2JhY2soJmNoYW5uZWxDb3VudEluZm8pOwogICB9CkBAIC0yMzksMTcgKzIzOSwxNyBAQAogfQogCiB2b2lkIENvZGVjMkZ1enplcjo6ZGVjb2RlRnJhbWVzKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gIG1CdWZmZXJTb3VyY2UgPSBuZXcgQnVmZmVyU291cmNlKGRhdGEsIHNpemUpOwotICBpZiAoIW1CdWZmZXJTb3VyY2UpIHsKKyAgc3RkOjp1bmlxdWVfcHRyPEJ1ZmZlclNvdXJjZT4gYnVmZmVyU291cmNlID0gc3RkOjptYWtlX3VuaXF1ZTxCdWZmZXJTb3VyY2U+KGRhdGEsIHNpemUpOworICBpZiAoIWJ1ZmZlclNvdXJjZSkgewogICAgIHJldHVybjsKICAgfQotICBtQnVmZmVyU291cmNlLT5wYXJzZSgpOworICBidWZmZXJTb3VyY2UtPnBhcnNlKCk7CiAgIGMyX3N0YXR1c190IHN0YXR1cyA9IEMyX09LOwogICBzaXplX3QgbnVtRnJhbWVzID0gMDsKLSAgd2hpbGUgKCFtQnVmZmVyU291cmNlLT5pc0VvcygpKSB7CisgIHdoaWxlICghYnVmZmVyU291cmNlLT5pc0VvcygpKSB7CiAgICAgdWludDhfdCogZnJhbWUgPSBudWxscHRyOwogICAgIHNpemVfdCBmcmFtZVNpemUgPSAwOwotICAgIEZyYW1lRGF0YSBmcmFtZURhdGEgPSBtQnVmZmVyU291cmNlLT5nZXRGcmFtZSgpOworICAgIEZyYW1lRGF0YSBmcmFtZURhdGEgPSBidWZmZXJTb3VyY2UtPmdldEZyYW1lKCk7CiAgICAgZnJhbWUgPSBzdGQ6OmdldDwwPihmcmFtZURhdGEpOwogICAgIGZyYW1lU2l6ZSA9IHN0ZDo6Z2V0PDE+KGZyYW1lRGF0YSk7CiAKQEAgLTI5OCw3ICsyOTgsNiBAQAogICBtQ29uZGl0aW9uYWxWYXJpYWJsZS53YWl0X2Zvcih3YWl0Rm9yRGVjb2RlQ29tcGxldGUsIGtDMkZ1enplclRpbWVPdXQsIFt0aGlzXSB7IHJldHVybiBtRW9zOyB9KTsKICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiBjMmZsdXNoZWRXb3JrczsKICAgbUNvbXBvbmVudC0+Zmx1c2hfc20oQzJDb21wb25lbnQ6OkZMVVNIX0NPTVBPTkVOVCwgJmMyZmx1c2hlZFdvcmtzKTsKLSAgZGVsZXRlIG1CdWZmZXJTb3VyY2U7CiB9CiAKIGV4dGVybiAiQyIgaW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9mdXp6ZXIvQzJGdXp6ZXIuaCBiL21lZGlhL2NvZGVjMi9mdXp6ZXIvQzJGdXp6ZXIuaAppbmRleCBkNWFjODFhLi5kYTc2ODg1IDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvZnV6emVyL0MyRnV6emVyLmgKKysrIGIvbWVkaWEvY29kZWMyL2Z1enplci9DMkZ1enplci5oCkBAIC0xMDQsNyArMTA0LDYgQEAKICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBrTWFya2VyU3VmZml4U2l6ZSA9IDM7CiAgIH07CiAKLSAgQnVmZmVyU291cmNlKiBtQnVmZmVyU291cmNlOwogICBib29sIG1Fb3MgPSBmYWxzZTsKICAgQzJCbG9ja1Bvb2w6OmxvY2FsX2lkX3QgbUJsb2NrUG9vbElkOwogCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzLy5jbGFuZy1mb3JtYXQgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzLy5jbGFuZy1mb3JtYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDEzNjI3OWMuLjAwMDAwMDAKLS0tIGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy8uY2xhbmctZm9ybWF0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLi4vLi4vLi4vLi4vLi4vLi4vLi4vYnVpbGQvc29vbmcvc2NyaXB0cy9zeXN0ZW0tY2xhbmctZm9ybWF0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9PV05FUlMgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL09XTkVSUwppbmRleCBkYmU4OWNmLi4zMmIxMWI4IDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL09XTkVSUworKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL09XTkVSUwpAQCAtMSw4ICsxLDUgQEAKKyMgQnVnIGNvbXBvbmVudDogMjU2OTAKICMgTWVkaWEgdGVhbQogbGFqb3NAZ29vZ2xlLmNvbQotcGF3aW5AZ29vZ2xlLmNvbQogdGFrbGVlQGdvb2dsZS5jb20KIHdvbnNpa0Bnb29nbGUuY29tCi0KLSMgVlRTIHRlYW0KLWRzaGlAZ29vZ2xlLmNvbQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9mdW5jdGlvbmFsL2F1ZGlvL1Z0c0hhbE1lZGlhQzJWMV8wVGFyZ2V0QXVkaW9EZWNUZXN0LmNwcCBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvZnVuY3Rpb25hbC9hdWRpby9WdHNIYWxNZWRpYUMyVjFfMFRhcmdldEF1ZGlvRGVjVGVzdC5jcHAKaW5kZXggOWUzYTgyMy4uZDQ3ZWY2NyAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9mdW5jdGlvbmFsL2F1ZGlvL1Z0c0hhbE1lZGlhQzJWMV8wVGFyZ2V0QXVkaW9EZWNUZXN0LmNwcAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL2Z1bmN0aW9uYWwvYXVkaW8vVnRzSGFsTWVkaWFDMlYxXzBUYXJnZXRBdWRpb0RlY1Rlc3QuY3BwCkBAIC00NjUsNiArNDY1LDExIEBACiAgICAgaWYgKG1NaW1lLmZpbmQoInJhdyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgICAgIGJpdFN0cmVhbUluZm9bMF0gPSA4MDAwOwogICAgICAgICBiaXRTdHJlYW1JbmZvWzFdID0gMTsKKyAgICB9IGVsc2UgaWYgKChtTWltZS5maW5kKCJnNzExLWFsYXciKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgfHwKKyAgICAgICAgICAgICAgIChtTWltZS5maW5kKCJnNzExLW1sYXciKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykpIHsKKyAgICAgICAgLy8gZzcxMSB0ZXN0IGRhdGEgaXMgYWxsIDEtY2hhbm5lbCBhbmQgaGFzIG5vIGVtYmVkZGVkIGNvbmZpZyBpbmZvLgorICAgICAgICBiaXRTdHJlYW1JbmZvWzBdID0gODAwMDsKKyAgICAgICAgYml0U3RyZWFtSW5mb1sxXSA9IDE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUX05PX0ZBVEFMX0ZBSUxVUkUoZ2V0SW5wdXRDaGFubmVsSW5mbyhtQ29tcG9uZW50LCBtTWltZSwgYml0U3RyZWFtSW5mbykpOwogICAgIH0KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvZnVuY3Rpb25hbC9jb21wb25lbnQvVnRzSGFsTWVkaWFDMlYxXzBUYXJnZXRDb21wb25lbnRUZXN0LmNwcCBiL21lZGlhL2NvZGVjMi9oaWRsLzEuMC92dHMvZnVuY3Rpb25hbC9jb21wb25lbnQvVnRzSGFsTWVkaWFDMlYxXzBUYXJnZXRDb21wb25lbnRUZXN0LmNwcAppbmRleCBmZmVjODk3Li4yNzVhNzIxIDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvaGlkbC8xLjAvdnRzL2Z1bmN0aW9uYWwvY29tcG9uZW50L1Z0c0hhbE1lZGlhQzJWMV8wVGFyZ2V0Q29tcG9uZW50VGVzdC5jcHAKKysrIGIvbWVkaWEvY29kZWMyL2hpZGwvMS4wL3Z0cy9mdW5jdGlvbmFsL2NvbXBvbmVudC9WdHNIYWxNZWRpYUMyVjFfMFRhcmdldENvbXBvbmVudFRlc3QuY3BwCkBAIC02MSw2ICs2MSw3IEBACiAgIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKSBvdmVycmlkZSB7CiAgICAgICAgIGdldFBhcmFtcygpOworICAgICAgICBtRGlzYWJsZVRlc3QgPSBmYWxzZTsKICAgICAgICAgbUVvcyA9IGZhbHNlOwogICAgICAgICBtQ2xpZW50ID0gYW5kcm9pZDo6Q29kZWMyQ2xpZW50OjpDcmVhdGVGcm9tU2VydmljZShtSW5zdGFuY2VOYW1lLmNfc3RyKCkpOwogICAgICAgICBBU1NFUlRfTkUobUNsaWVudCwgbnVsbHB0cik7CkBAIC03Myw2ICs3NCwxNCBAQAogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9JTlBVVF9CVUZGRVJTOyArK2kpIHsKICAgICAgICAgICAgIG1Xb3JrUXVldWUuZW1wbGFjZV9iYWNrKG5ldyBDMldvcmspOwogICAgICAgICB9CisKKyAgICAgICAgQzJTZWN1cmVNb2RlVHVuaW5nIHNlY3VyZU1vZGVUdW5pbmd7fTsKKyAgICAgICAgbUNvbXBvbmVudC0+cXVlcnkoeyZzZWN1cmVNb2RlVHVuaW5nfSwge30sIEMyX01BWV9CTE9DSywgbnVsbHB0cik7CisgICAgICAgIGlmIChzZWN1cmVNb2RlVHVuaW5nLnZhbHVlICE9IEMyQ29uZmlnOjpTTV9VTlBST1RFQ1RFRCkgeworICAgICAgICAgICAgbURpc2FibGVUZXN0ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtRGlzYWJsZVRlc3QpIHN0ZDo6Y291dCA8PCAiWyAgIFdBUk4gICBdIFRlc3QgRGlzYWJsZWQgXG4iOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpIG92ZXJyaWRlIHsKQEAgLTEwNSw2ICsxMTQsNyBAQAogICAgIHN0ZDo6c3RyaW5nIG1JbnN0YW5jZU5hbWU7CiAgICAgc3RkOjpzdHJpbmcgbUNvbXBvbmVudE5hbWU7CiAgICAgYm9vbCBtRW9zOworICAgIGJvb2wgbURpc2FibGVUZXN0OwogICAgIHN0ZDo6bXV0ZXggbVF1ZXVlTG9jazsKICAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBtUXVldWVDb25kaXRpb247CiAgICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiBtV29ya1F1ZXVlOwpAQCAtMzI0LDYgKzMzNCw3IEBACiB9OwogCiBURVNUX1AoQ29kZWMyQ29tcG9uZW50SW5wdXRUZXN0cywgSW5wdXRCdWZmZXJUZXN0KSB7CisgICAgaWYgKG1EaXNhYmxlVGVzdCkgR1RFU1RfU0tJUCgpIDw8ICJUZXN0IGlzIGRpc2FibGVkIjsKICAgICBkZXNjcmlwdGlvbigiVGVzdHMgZm9yIGRpZmZlcmVudCBpbnB1dHMiKTsKIAogICAgIHVpbnQzMl90IGZsYWdzID0gc3RkOjpnZXQ8Mj4oR2V0UGFyYW0oKSk7CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvaGlkbC9wbHVnaW4vRmlsdGVyV3JhcHBlci5jcHAgYi9tZWRpYS9jb2RlYzIvaGlkbC9wbHVnaW4vRmlsdGVyV3JhcHBlci5jcHAKaW5kZXggNzBjNjNmMi4uYjYwMjRmZiAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWMyL2hpZGwvcGx1Z2luL0ZpbHRlcldyYXBwZXIuY3BwCisrKyBiL21lZGlhL2NvZGVjMi9oaWRsL3BsdWdpbi9GaWx0ZXJXcmFwcGVyLmNwcApAQCAtNDMwLDYgKzQzMCwxMCBAQAogICAgICAgICAgICAgTE9HKERFQlVHKSA8PCAiV3JhcHBlZERlY29kZXJJbnRlcmZhY2U6IEZpbHRlcldyYXBwZXIgbm90IGZvdW5kIjsKICAgICAgICAgICAgIHJldHVybiBDMl9PSzsKICAgICAgICAgfQorICAgICAgICBpZiAoIWZpbHRlcldyYXBwZXItPmlzRmlsdGVyaW5nRW5hYmxlZChuZXh0KSkgeworICAgICAgICAgICAgTE9HKFZFUkJPU0UpIDw8ICJXcmFwcGVkRGVjb2RlckludGVyZmFjZTogZmlsdGVyaW5nIG5vdCBlbmFibGVkIjsKKyAgICAgICAgICAgIHJldHVybiBDMl9PSzsKKyAgICAgICAgfQogICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4+IHBhcmFtczsKICAgICAgICAgYzJfc3RhdHVzX3QgZXJyID0gZmlsdGVyV3JhcHBlci0+cXVlcnlQYXJhbXNGb3JQcmV2aW91c0NvbXBvbmVudChuZXh0LCAmcGFyYW1zKTsKICAgICAgICAgaWYgKGVyciAhPSBDMl9PSykgewpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvc2VydmljZXMvQW5kcm9pZC5icCBiL21lZGlhL2NvZGVjMi9oaWRsL3NlcnZpY2VzL0FuZHJvaWQuYnAKaW5kZXggYmI5ZjUxZi4uYjM2ZTgwYSAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWMyL2hpZGwvc2VydmljZXMvQW5kcm9pZC5icAorKysgYi9tZWRpYS9jb2RlYzIvaGlkbC9zZXJ2aWNlcy9BbmRyb2lkLmJwCkBAIC01Miw3ICs1Miw3IEBACiAKICAgICAvLyBtaW5pamFpbCBpcyB1c2VkIHRvIHByb3RlY3QgYWdhaW5zdCB1bmV4cGVjdGVkIHN5c3RlbSBjYWxscy4KICAgICBzaGFyZWRfbGliczogWwotICAgICAgICAibGliYXZzZXJ2aWNlc19taW5pamFpbF92ZW5kb3IiLAorICAgICAgICAibGliYXZzZXJ2aWNlc19taW5pamFpbCIsCiAgICAgICAgICJsaWJiaW5kZXIiLAogICAgIF0sCiAgICAgcmVxdWlyZWQ6IFsiYW5kcm9pZC5oYXJkd2FyZS5tZWRpYS5jMkAxLjItZGVmYXVsdC1zZWNjb21wX3BvbGljeSJdLApkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL2hpZGwvc2VydmljZXMvYW5kcm9pZC5oYXJkd2FyZS5tZWRpYS5jMkAxLjItZGVmYXVsdC1zZXJ2aWNlLnJjIGIvbWVkaWEvY29kZWMyL2hpZGwvc2VydmljZXMvYW5kcm9pZC5oYXJkd2FyZS5tZWRpYS5jMkAxLjItZGVmYXVsdC1zZXJ2aWNlLnJjCmluZGV4IDAzZjZlM2QuLjEyZGE1OTMgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9oaWRsL3NlcnZpY2VzL2FuZHJvaWQuaGFyZHdhcmUubWVkaWEuYzJAMS4yLWRlZmF1bHQtc2VydmljZS5yYworKysgYi9tZWRpYS9jb2RlYzIvaGlkbC9zZXJ2aWNlcy9hbmRyb2lkLmhhcmR3YXJlLm1lZGlhLmMyQDEuMi1kZWZhdWx0LXNlcnZpY2UucmMKQEAgLTMsNSArMyw1IEBACiAgICAgdXNlciBtZWRpYWNvZGVjCiAgICAgZ3JvdXAgY2FtZXJhIG1lZGlhZHJtIGRybXJwYwogICAgIGlvcHJpbyBydCA0Ci0gICAgd3JpdGVwaWQgL2Rldi9jcHVzZXQvZm9yZWdyb3VuZC90YXNrcworICAgIHRhc2tfcHJvZmlsZXMgUHJvY2Vzc0NhcGFjaXR5SGlnaAogCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjLmNwcCBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWMuY3BwCmluZGV4IDgyNDYwYzkuLjQ0YTJjNWIgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWMuY3BwCisrKyBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWMuY3BwCkBAIC0xMzMyLDggKzEzMzIsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgLy8gc2V0IGNoYW5uZWwtbWFzawogICAgICAgICBpZiAoY29uZmlnLT5tRG9tYWluICYgQ29uZmlnOjpJU19BVURJTykgeworICAgICAgICAgICAgLy8gc2V0IGNoYW5uZWwtbWFzawogICAgICAgICAgICAgaW50MzJfdCBtYXNrOwogICAgICAgICAgICAgaWYgKG1zZy0+ZmluZEludDMyKEtFWV9DSEFOTkVMX01BU0ssICZtYXNrKSkgewogICAgICAgICAgICAgICAgIGlmIChjb25maWctPm1Eb21haW4gJiBDb25maWc6OklTX0VOQ09ERVIpIHsKQEAgLTEzNDIsNiArMTM0MiwxNSBAQAogICAgICAgICAgICAgICAgICAgICBjb25maWctPm1PdXRwdXRGb3JtYXQtPnNldEludDMyKEtFWV9DSEFOTkVMX01BU0ssIG1hc2spOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gc2V0IFBDTSBlbmNvZGluZworICAgICAgICAgICAgaW50MzJfdCBwY21FbmNvZGluZyA9IGtBdWRpb0VuY29kaW5nUGNtMTZiaXQ7CisgICAgICAgICAgICBtc2ctPmZpbmRJbnQzMihLRVlfUENNX0VOQ09ESU5HLCAmcGNtRW5jb2RpbmcpOworICAgICAgICAgICAgaWYgKGVuY29kZXIpIHsKKyAgICAgICAgICAgICAgICBjb25maWctPm1JbnB1dEZvcm1hdC0+c2V0SW50MzIoImFuZHJvaWQuX2NvbmZpZy1wY20tZW5jb2RpbmciLCBwY21FbmNvZGluZyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbmZpZy0+bU91dHB1dEZvcm1hdC0+c2V0SW50MzIoImFuZHJvaWQuX2NvbmZpZy1wY20tZW5jb2RpbmciLCBwY21FbmNvZGluZyk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QzJQYXJhbT4gY29sb3JUcmFuc2ZlclJlcXVlc3RQYXJhbTsKQEAgLTE0MjEsNiArMTQzMCwxMCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgaWYgKGNvbmZpZy0+bVR1bm5lbGVkKSB7CisgICAgICAgICAgICBjb25maWctPm1PdXRwdXRGb3JtYXQtPnNldEludDMyKCJhbmRyb2lkLl90dW5uZWxlZCIsIDEpOworICAgICAgICB9CisKICAgICAgICAgQUxPR0QoInNldHVwIGZvcm1hdHMgaW5wdXQ6ICVzIiwKICAgICAgICAgICAgICAgICBjb25maWctPm1JbnB1dEZvcm1hdC0+ZGVidWdTdHJpbmcoKS5jX3N0cigpKTsKICAgICAgICAgQUxPR0QoInNldHVwIGZvcm1hdHMgb3V0cHV0OiAlcyIsCkBAIC0xODk2LDkgKzE5MDksMTEgQEAKICAgICB7CiAgICAgICAgIE11dGV4ZWQ8c3RkOjp1bmlxdWVfcHRyPENvbmZpZz4+OjpMb2NrZWQgY29uZmlnTG9ja2VkKG1Db25maWcpOwogICAgICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8Q29uZmlnPiAmY29uZmlnID0gKmNvbmZpZ0xvY2tlZDsKKyAgICAgICAgc3A8QU5hdGl2ZVdpbmRvdz4gbmF0aXZlV2luZG93ID0gc3RhdGljX2Nhc3Q8QU5hdGl2ZVdpbmRvdyAqPihzdXJmYWNlLmdldCgpKTsKKyAgICAgICAgc3RhdHVzX3QgZXJyID0gT0s7CisKICAgICAgICAgaWYgKGNvbmZpZy0+bVR1bm5lbGVkICYmIGNvbmZpZy0+bVNpZGViYW5kSGFuZGxlICE9IG51bGxwdHIpIHsKLSAgICAgICAgICAgIHNwPEFOYXRpdmVXaW5kb3c+IG5hdGl2ZVdpbmRvdyA9IHN0YXRpY19jYXN0PEFOYXRpdmVXaW5kb3cgKj4oc3VyZmFjZS5nZXQoKSk7Ci0gICAgICAgICAgICBzdGF0dXNfdCBlcnIgPSBuYXRpdmVfd2luZG93X3NldF9zaWRlYmFuZF9zdHJlYW0oCisgICAgICAgICAgICBlcnIgPSBuYXRpdmVfd2luZG93X3NldF9zaWRlYmFuZF9zdHJlYW0oCiAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZVdpbmRvdy5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDxuYXRpdmVfaGFuZGxlX3QgKj4oY29uZmlnLT5tU2lkZWJhbmRIYW5kbGUtPmhhbmRsZSgpKSk7CiAgICAgICAgICAgICBpZiAoZXJyICE9IE9LKSB7CkBAIC0xOTA2LDYgKzE5MjEsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZVdpbmRvdy5nZXQoKSwgY29uZmlnLT5tU2lkZWJhbmRIYW5kbGUtPmhhbmRsZSgpLCBlcnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBFeHBsaWNpdGx5IHJlc2V0IHRoZSBzaWRlYmFuZCBoYW5kbGUgb2YgdGhlIHdpbmRvdyBmb3IKKyAgICAgICAgICAgIC8vIG5vbi10dW5uZWxlZCB2aWRlbyBpbiBjYXNlIHRoZSB3aW5kb3cgd2FzIHByZXZpb3VzbHkgdXNlZAorICAgICAgICAgICAgLy8gZm9yIGEgdHVubmVsZWQgdmlkZW8gcGxheWJhY2suCisgICAgICAgICAgICBlcnIgPSBuYXRpdmVfd2luZG93X3NldF9zaWRlYmFuZF9zdHJlYW0obmF0aXZlV2luZG93LmdldCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gT0spIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgibmF0aXZlX3dpbmRvd19zZXRfc2lkZWJhbmRfc3RyZWFtKG51bGxwdHIpIGZhaWxlZCEgKGVyciAlZCkuIiwgZXJyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBtQ2hhbm5lbC0+c2V0U3VyZmFjZShzdXJmYWNlKTsKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWNCdWZmZXJDaGFubmVsLmNwcCBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWNCdWZmZXJDaGFubmVsLmNwcAppbmRleCA2ZjdiN2Y3Li4wZGUwYjc3IDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjQnVmZmVyQ2hhbm5lbC5jcHAKKysrIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlY0J1ZmZlckNoYW5uZWwuY3BwCkBAIC0yNTQsNyArMjU0LDcgQEAKICAgICAgICAgICAgICAgICBib29sIHJlbGVhc2VkID0gaW5wdXQtPmJ1ZmZlcnMtPnJlbGVhc2VCdWZmZXIoYnVmZmVyLCBudWxscHRyLCB0cnVlKTsKICAgICAgICAgICAgICAgICBBTE9HVigiWyVzXSBxdWV1ZUlucHV0QnVmZmVyOiBidWZmZXIgY29waWVkOyAlc3JlbGVhc2VkIiwKICAgICAgICAgICAgICAgICAgICAgICBtTmFtZSwgcmVsZWFzZWQgPyAiIiA6ICJub3QgIik7Ci0gICAgICAgICAgICAgICAgYnVmZmVyLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgYnVmZmVyID0gY29weTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQUxPR1coIlslc10gcXVldWVJbnB1dEJ1ZmZlcjogZmFpbGVkIHRvIGNvcHkgYSBidWZmZXI7IHRoaXMgbWF5IGNhdXNlIGlucHV0ICIKICAgICAgICAgICAgICAgICAgICAgICAiYnVmZmVyIHN0YXJ2YXRpb24gb24gY29tcG9uZW50LiIsIG1OYW1lKTsKQEAgLTI4Miw2ICsyODIsMTIgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZW9zKSB7CisgICAgICAgIE11dGV4ZWQ8SW5wdXQ+OjpMb2NrZWQgaW5wdXQobUlucHV0KTsKKyAgICAgICAgaWYgKGlucHV0LT5mcmFtZVJlYXNzZW1ibGVyKSB7CisgICAgICAgICAgICB1c2VzRnJhbWVSZWFzc2VtYmxlciA9IHRydWU7CisgICAgICAgICAgICAvLyBkcmFpbiBhbnkgcGVuZGluZyBpdGVtcyB3aXRoIGVvcworICAgICAgICAgICAgaW5wdXQtPmZyYW1lUmVhc3NlbWJsZXIucHJvY2VzcyhidWZmZXIsICZpdGVtcyk7CisgICAgICAgIH0KICAgICAgICAgZmxhZ3MgfD0gQzJGcmFtZURhdGE6OkZMQUdfRU5EX09GX1NUUkVBTTsKICAgICB9CiAgICAgaWYgKHVzZXNGcmFtZVJlYXNzZW1ibGVyKSB7CkBAIC0zNDEsMTAgKzM0NywxMCBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIE11dGV4ZWQ8SW5wdXQ+OjpMb2NrZWQgaW5wdXQobUlucHV0KTsKICAgICAgICAgYm9vbCByZWxlYXNlZCA9IGZhbHNlOwotICAgICAgICBpZiAoYnVmZmVyKSB7Ci0gICAgICAgICAgICByZWxlYXNlZCA9IGlucHV0LT5idWZmZXJzLT5yZWxlYXNlQnVmZmVyKGJ1ZmZlciwgbnVsbHB0ciwgdHJ1ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29weSkgeworICAgICAgICBpZiAoY29weSkgewogICAgICAgICAgICAgcmVsZWFzZWQgPSBpbnB1dC0+ZXh0cmFCdWZmZXJzLnJlbGVhc2VTbG90KGNvcHksIG51bGxwdHIsIHRydWUpOworICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlcikgeworICAgICAgICAgICAgcmVsZWFzZWQgPSBpbnB1dC0+YnVmZmVycy0+cmVsZWFzZUJ1ZmZlcihidWZmZXIsIG51bGxwdHIsIHRydWUpOwogICAgICAgICB9CiAgICAgICAgIEFMT0dWKCJbJXNdIHF1ZXVlSW5wdXRCdWZmZXI6IGJ1ZmZlciVzICVzcmVsZWFzZWQiLAogICAgICAgICAgICAgICBtTmFtZSwgKGJ1ZmZlciA9PSBudWxscHRyKSA/ICIoY29weSkiIDogIiIsIHJlbGVhc2VkID8gIiIgOiAibm90ICIpOwpAQCAtMTM4Miw2ICsxMzg4LDEyIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgaW50MzJfdCB0dW5uZWxlZCA9IDA7CisgICAgICAgIGlmICghb3V0cHV0Rm9ybWF0LT5maW5kSW50MzIoImFuZHJvaWQuX3R1bm5lbGVkIiwgJnR1bm5lbGVkKSkgeworICAgICAgICAgICAgdHVubmVsZWQgPSAwOworICAgICAgICB9CisgICAgICAgIG1UdW5uZWxlZCA9ICh0dW5uZWxlZCAhPSAwKTsKICAgICB9CiAKICAgICAvLyBTZXQgdXAgcGlwZWxpbmUgY29udHJvbC4gVGhpcyBoYXMgdG8gYmUgZG9uZSBhZnRlciBtSW5wdXRCdWZmZXJzIGFuZApAQCAtMTg5OSwxMCArMTkxMSwyMSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgYm9vbCBkcm9wID0gZmFsc2U7CisgICAgaWYgKHdvcmtsZXQtPm91dHB1dC5mbGFncyAmIEMyRnJhbWVEYXRhOjpGTEFHX0RST1BfRlJBTUUpIHsKKyAgICAgICAgQUxPR1YoIlslc10gb25Xb3JrRG9uZTogZHJvcCBidWZmZXIgYnV0IGtlZXAgbWV0YWRhdGEiLCBtTmFtZSk7CisgICAgICAgIGRyb3AgPSB0cnVlOworICAgIH0KKwogICAgIGlmIChub3RpZnlDbGllbnQgJiYgIWJ1ZmZlciAmJiAhZmxhZ3MpIHsKLSAgICAgICAgQUxPR1YoIlslc10gb25Xb3JrRG9uZTogTm90IHJlcG9ydGluZyBvdXRwdXQgYnVmZmVyICglbGxkKSIsCi0gICAgICAgICAgICAgIG1OYW1lLCB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXgucGVla3VsbCgpKTsKLSAgICAgICAgbm90aWZ5Q2xpZW50ID0gZmFsc2U7CisgICAgICAgIGlmIChtVHVubmVsZWQgJiYgZHJvcCAmJiBvdXRwdXRGb3JtYXQpIHsKKyAgICAgICAgICAgIEFMT0dWKCJbJXNdIG9uV29ya0RvbmU6IEtlZXAgdHVubmVsZWQsIGRyb3AgZnJhbWUgd2l0aCBmb3JtYXQgY2hhbmdlICglbGxkKSIsCisgICAgICAgICAgICAgICAgICBtTmFtZSwgd29yay0+aW5wdXQub3JkaW5hbC5mcmFtZUluZGV4LnBlZWt1bGwoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBTE9HVigiWyVzXSBvbldvcmtEb25lOiBOb3QgcmVwb3J0aW5nIG91dHB1dCBidWZmZXIgKCVsbGQpIiwKKyAgICAgICAgICAgICAgICAgIG1OYW1lLCB3b3JrLT5pbnB1dC5vcmRpbmFsLmZyYW1lSW5kZXgucGVla3VsbCgpKTsKKyAgICAgICAgICAgIG5vdGlmeUNsaWVudCA9IGZhbHNlOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGJ1ZmZlcikgewpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlY0J1ZmZlckNoYW5uZWwuaCBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWNCdWZmZXJDaGFubmVsLmgKaW5kZXggNGRiNjljYi4uMjZlZWYzMCAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlY0J1ZmZlckNoYW5uZWwuaAorKysgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjQnVmZmVyQ2hhbm5lbC5oCkBAIC0zMjQsNiArMzI0LDggQEAKICAgICAgICAgcmV0dXJuIG1DcnlwdG8gIT0gbnVsbHB0ciB8fCBtRGVzY3JhbWJsZXIgIT0gbnVsbHB0cjsKICAgICB9CiAgICAgc3RkOjphdG9taWNfYm9vbCBtU2VuZEVuY3J5cHRlZEluZm9CdWZmZXI7CisKKyAgICBzdGQ6OmF0b21pY19ib29sIG1UdW5uZWxlZDsKIH07CiAKIC8vIENvbnZlcnNpb24gb2YgYSBjMl9zdGF0dXNfdCB2YWx1ZSB0byBhIHN0YXR1c190IHZhbHVlIG1heSBkZXBlbmQgb24gdGhlCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjQnVmZmVycy5jcHAgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjQnVmZmVycy5jcHAKaW5kZXggMzMzYTJjYS4uOTdlMWEwMSAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlY0J1ZmZlcnMuY3BwCisrKyBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWNCdWZmZXJzLmNwcApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPEMyUGxhdGZvcm1TdXBwb3J0Lmg+CiAKICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FEZWJ1Zy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vTWVkaWFEZWZzLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFDb2RlYy5oPgogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhQ29kZWNDb25zdGFudHMuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9Ta2lwQ3V0QnVmZmVyLmg+CkBAIC0xMzIsNiArMTMzLDcgQEAKICAgICBpZiAoIWNvcHktPmNvcHkoYzJidWZmZXIpKSB7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KKyAgICBjb3B5LT5tZXRhKCktPmV4dGVuZChidWZmZXItPm1ldGEoKSk7CiAgICAgcmV0dXJuIGNvcHk7CiB9CiAKQEAgLTE5OSw2ICsyMDEsNTYgQEAKICAgICBtU2tpcEN1dEJ1ZmZlciA9IG5ldyBTa2lwQ3V0QnVmZmVyKHNraXAsIGN1dCwgbUNoYW5uZWxDb3VudCk7CiB9CiAKK2Jvb2wgT3V0cHV0QnVmZmVyczo6Y29udmVydCgKKyAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEMyQnVmZmVyPiAmc3JjLCBzcDxDb2RlYzJCdWZmZXI+ICpkc3QpIHsKKyAgICBpZiAoIXNyYyB8fCBzcmMtPmRhdGEoKS50eXBlKCkgIT0gQzJCdWZmZXJEYXRhOjpMSU5FQVIpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpbnQzMl90IGNvbmZpZ0VuY29kaW5nID0ga0F1ZGlvRW5jb2RpbmdQY20xNmJpdDsKKyAgICBpbnQzMl90IGNvZGVjRW5jb2RpbmcgPSBrQXVkaW9FbmNvZGluZ1BjbTE2Yml0OworICAgIGlmIChtRm9ybWF0LT5maW5kSW50MzIoImFuZHJvaWQuX2NvZGVjLXBjbS1lbmNvZGluZyIsICZjb2RlY0VuY29kaW5nKQorICAgICAgICAgICAgJiYgbUZvcm1hdC0+ZmluZEludDMyKCJhbmRyb2lkLl9jb25maWctcGNtLWVuY29kaW5nIiwgJmNvbmZpZ0VuY29kaW5nKSkgeworICAgICAgICBpZiAobVNyY0VuY29kaW5nICE9IGNvZGVjRW5jb2RpbmcgfHwgbURzdEVuY29kaW5nICE9IGNvbmZpZ0VuY29kaW5nKSB7CisgICAgICAgICAgICBpZiAoY29kZWNFbmNvZGluZyAhPSBjb25maWdFbmNvZGluZykgeworICAgICAgICAgICAgICAgIG1EYXRhQ29udmVydGVyID0gQXVkaW9Db252ZXJ0ZXI6OkNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIChBdWRpb0VuY29kaW5nKWNvZGVjRW5jb2RpbmcsIChBdWRpb0VuY29kaW5nKWNvbmZpZ0VuY29kaW5nKTsKKyAgICAgICAgICAgICAgICBBTE9HRF9JRihtRGF0YUNvbnZlcnRlciwgIlslc10gQ29udmVydGVyIGNyZWF0ZWQgZnJvbSAlZCB0byAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgbU5hbWUsIGNvZGVjRW5jb2RpbmcsIGNvbmZpZ0VuY29kaW5nKTsKKyAgICAgICAgICAgICAgICBtRm9ybWF0V2l0aENvbnZlcnRlciA9IG1Gb3JtYXQtPmR1cCgpOworICAgICAgICAgICAgICAgIG1Gb3JtYXRXaXRoQ29udmVydGVyLT5zZXRJbnQzMihLRVlfUENNX0VOQ09ESU5HLCBjb25maWdFbmNvZGluZyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1EYXRhQ29udmVydGVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtRm9ybWF0V2l0aENvbnZlcnRlciA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtU3JjRW5jb2RpbmcgPSBjb2RlY0VuY29kaW5nOworICAgICAgICAgICAgbURzdEVuY29kaW5nID0gY29uZmlnRW5jb2Rpbmc7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGludCBlbmNvZGluZzsgIW1Gb3JtYXQtPmZpbmRJbnQzMihLRVlfUENNX0VOQ09ESU5HLCAmZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgfHwgZW5jb2RpbmcgIT0gbURzdEVuY29kaW5nKSB7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFtRGF0YUNvbnZlcnRlcikgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHNwPE1lZGlhQ29kZWNCdWZmZXI+IHNyY0J1ZmZlciA9IENvbnN0TGluZWFyQmxvY2tCdWZmZXI6OkFsbG9jYXRlKG1Gb3JtYXQsIHNyYyk7CisgICAgaWYgKCFzcmNCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoISpkc3QpIHsKKyAgICAgICAgKmRzdCA9IG5ldyBDb2RlYzJCdWZmZXIoCisgICAgICAgICAgICAgICAgbUZvcm1hdCwKKyAgICAgICAgICAgICAgICBuZXcgQUJ1ZmZlcihtRGF0YUNvbnZlcnRlci0+dGFyZ2V0U2l6ZShzcmNCdWZmZXItPnNpemUoKSkpKTsKKyAgICB9CisgICAgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gZHN0QnVmZmVyID0gKmRzdDsKKyAgICBzdGF0dXNfdCBlcnIgPSBtRGF0YUNvbnZlcnRlci0+Y29udmVydChzcmNCdWZmZXIsIGRzdEJ1ZmZlcik7CisgICAgaWYgKGVyciAhPSBPSykgeworICAgICAgICBBTE9HRCgiWyVzXSBidWZmZXIgY29udmVyc2lvbiBmYWlsZWQ6ICVkIiwgbU5hbWUsIGVycik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZHN0QnVmZmVyLT5zZXRGb3JtYXQobUZvcm1hdFdpdGhDb252ZXJ0ZXIpOworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIE91dHB1dEJ1ZmZlcnM6OmNsZWFyU3Rhc2goKSB7CiAgICAgbVBlbmRpbmcuY2xlYXIoKTsKICAgICBtUmVvcmRlclN0YXNoLmNsZWFyKCk7CkBAIC0xMDc4LDcgKzExMzAsNyBAQAogICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KICAgICBjMkJ1ZmZlci0+c2V0Rm9ybWF0KG1Gb3JtYXQpOwotICAgIGlmICghYzJCdWZmZXItPmNvcHkoYnVmZmVyKSkgeworICAgIGlmICghY29udmVydChidWZmZXIsICZjMkJ1ZmZlcikgJiYgIWMyQnVmZmVyLT5jb3B5KGJ1ZmZlcikpIHsKICAgICAgICAgQUxPR0QoIlslc10gY29weSBidWZmZXIgZmFpbGVkIiwgbU5hbWUpOwogICAgICAgICByZXR1cm4gV09VTERfQkxPQ0s7CiAgICAgfQpAQCAtMTE5NCw5ICsxMjQ2LDEyIEBACiAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxDMkJ1ZmZlcj4gJmJ1ZmZlciwKICAgICAgICAgc2l6ZV90ICppbmRleCwKICAgICAgICAgc3A8TWVkaWFDb2RlY0J1ZmZlcj4gKmNsaWVudEJ1ZmZlcikgewotICAgIHNwPENvZGVjMkJ1ZmZlcj4gbmV3QnVmZmVyID0gd3JhcChidWZmZXIpOwotICAgIGlmIChuZXdCdWZmZXIgPT0gbnVsbHB0cikgewotICAgICAgICByZXR1cm4gTk9fTUVNT1JZOworICAgIHNwPENvZGVjMkJ1ZmZlcj4gbmV3QnVmZmVyOworICAgIGlmICghY29udmVydChidWZmZXIsICZuZXdCdWZmZXIpKSB7CisgICAgICAgIG5ld0J1ZmZlciA9IHdyYXAoYnVmZmVyKTsKKyAgICAgICAgaWYgKG5ld0J1ZmZlciA9PSBudWxscHRyKSB7CisgICAgICAgICAgICByZXR1cm4gTk9fTUVNT1JZOworICAgICAgICB9CiAgICAgfQogICAgIG5ld0J1ZmZlci0+c2V0Rm9ybWF0KG1Gb3JtYXQpOwogICAgICppbmRleCA9IG1JbXBsLmFzc2lnblNsb3QobmV3QnVmZmVyKTsKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWNCdWZmZXJzLmggYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ0NvZGVjQnVmZmVycy5oCmluZGV4IDk5NWQzYTQuLmM4ZTk5MzAgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWNCdWZmZXJzLmgKKysrIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlY0J1ZmZlcnMuaApAQCAtMTgsOSArMTgsMTEgQEAKIAogI2RlZmluZSBDQ09ERUNfQlVGRkVSU19IXwogCisjaW5jbHVkZSA8b3B0aW9uYWw+CiAjaW5jbHVkZSA8c3RyaW5nPgogCiAjaW5jbHVkZSA8QzJDb25maWcuaD4KKyNpbmNsdWRlIDxEYXRhQ29udmVydGVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BTWVzc2FnZS5oPgogI2luY2x1ZGUgPG1lZGlhL01lZGlhQ29kZWNCdWZmZXIuaD4KIApAQCAtMzgyLDYgKzM4NCwxNCBAQAogICAgICAqLwogICAgIHZvaWQgc3VibWl0KGNvbnN0IHNwPE1lZGlhQ29kZWNCdWZmZXI+ICZidWZmZXIpOwogCisgICAgLyoqCisgICAgICogQXBwbHkgRGF0YUNvbnZlcnRlciBmcm9tIHxzcmN8IHRvIHwqZHN0fCBpZiBuZWVkZWQuIElmIHwqZHN0fCBpcyBudWxscHRyLAorICAgICAqIGEgbmV3IGJ1ZmZlciBpcyBhbGxvY2F0ZWQuCisgICAgICoKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgY29udmVyc2lvbiB3YXMgbmVlZGVkIGFuZCBleGVjdXRlZDsgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqLworICAgIGJvb2wgY29udmVydChjb25zdCBzdGQ6OnNoYXJlZF9wdHI8QzJCdWZmZXI+ICZzcmMsIHNwPENvZGVjMkJ1ZmZlcj4gKmRzdCk7CisKIHByaXZhdGU6CiAgICAgLy8gU2tpcEN1dEJ1ZmZlcgogICAgIGludDMyX3QgbURlbGF5OwpAQCAtMzkxLDYgKzQwMSwxMiBAQAogCiAgICAgdm9pZCBzZXRTa2lwQ3V0QnVmZmVyKGludDMyX3Qgc2tpcCwgaW50MzJfdCBjdXQpOwogCisgICAgLy8gRGF0YUNvbnZlcnRlcgorICAgIHNwPERhdGFDb252ZXJ0ZXI+IG1EYXRhQ29udmVydGVyOworICAgIHNwPEFNZXNzYWdlPiBtRm9ybWF0V2l0aENvbnZlcnRlcjsKKyAgICBzdGQ6Om9wdGlvbmFsPGludDMyX3Q+IG1TcmNFbmNvZGluZzsKKyAgICBzdGQ6Om9wdGlvbmFsPGludDMyX3Q+IG1Ec3RFbmNvZGluZzsKKwogICAgIC8vIE91dHB1dCBzdGFzaAogCiAgICAgLy8gU3RydWN0IGZvciBhbiBlbnRyeSBpbiB0aGUgb3V0cHV0IHN0YXNoIChtUGVuZGluZyBhbmQgbVJlb3JkZXJTdGFzaCkKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9DQ29kZWNDb25maWcuY3BwIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlY0NvbmZpZy5jcHAKaW5kZXggYzI3NTE4Ny4uMDM0MThkOSAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlY0NvbmZpZy5jcHAKKysrIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NDb2RlY0NvbmZpZy5jcHAKQEAgLTY1NywyNCArNjU3LDI5IEBACiAgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfU0FNUExFX1JBVEUsICAgQzJfUEFSQU1LRVlfQ09ERURfU0FNUExFX1JBVEUsICAidmFsdWUiKQogICAgICAgICAubGltaXRUbyhEOjpBVURJTyAmIEQ6OkNPREVEKSk7CiAKLSAgICBhZGQoQ29uZmlnTWFwcGVyKEtFWV9QQ01fRU5DT0RJTkcsICBDMl9QQVJBTUtFWV9QQ01fRU5DT0RJTkcsICAgICAgICJ2YWx1ZSIpCisgICAgYXV0byBwY21FbmNvZGluZ01hcHBlciA9IFtdKEMyVmFsdWUgdikgLT4gQzJWYWx1ZSB7CisgICAgICAgIGludDMyX3QgdmFsdWU7CisgICAgICAgIEMyQ29uZmlnOjpwY21fZW5jb2RpbmdfdCB0bzsKKyAgICAgICAgaWYgKHYuZ2V0KCZ2YWx1ZSkgJiYgQzJNYXBwZXI6Om1hcCh2YWx1ZSwgJnRvKSkgeworICAgICAgICAgICAgcmV0dXJuIHRvOworICAgICAgICB9CisgICAgICAgIHJldHVybiBDMlZhbHVlKCk7CisgICAgfTsKKyAgICBhdXRvIHBjbUVuY29kaW5nUmV2ZXJzZSA9IFtdKEMyVmFsdWUgdikgLT4gQzJWYWx1ZSB7CisgICAgICAgIEMyQ29uZmlnOjpwY21fZW5jb2RpbmdfdCB2YWx1ZTsKKyAgICAgICAgaW50MzJfdCB0bzsKKyAgICAgICAgdXNpbmcgQzJWYWx1ZVR5cGU9dHlwZW5hbWUgX2MyX3JlZHVjZV9lbnVtX3RvX3VuZGVybHlpbmdfdHlwZTxkZWNsdHlwZSh2YWx1ZSk+Ojp0eXBlOworICAgICAgICBpZiAodi5nZXQoKEMyVmFsdWVUeXBlKikmdmFsdWUpICYmIEMyTWFwcGVyOjptYXAodmFsdWUsICZ0bykpIHsKKyAgICAgICAgICAgIHJldHVybiB0bzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQzJWYWx1ZSgpOworICAgIH07CisgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfUENNX0VOQ09ESU5HLCAgICAgICAgICAgICAgQzJfUEFSQU1LRVlfUENNX0VOQ09ESU5HLCAidmFsdWUiKQogICAgICAgICAubGltaXRUbyhEOjpBVURJTykKLSAgICAgICAgLndpdGhNYXBwZXJzKFtdKEMyVmFsdWUgdikgLT4gQzJWYWx1ZSB7Ci0gICAgICAgICAgICBpbnQzMl90IHZhbHVlOwotICAgICAgICAgICAgQzJDb25maWc6OnBjbV9lbmNvZGluZ190IHRvOwotICAgICAgICAgICAgaWYgKHYuZ2V0KCZ2YWx1ZSkgJiYgQzJNYXBwZXI6Om1hcCh2YWx1ZSwgJnRvKSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0bzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBDMlZhbHVlKCk7Ci0gICAgICAgIH0sIFtdKEMyVmFsdWUgdikgLT4gQzJWYWx1ZSB7Ci0gICAgICAgICAgICBDMkNvbmZpZzo6cGNtX2VuY29kaW5nX3QgdmFsdWU7Ci0gICAgICAgICAgICBpbnQzMl90IHRvOwotICAgICAgICAgICAgdXNpbmcgQzJWYWx1ZVR5cGU9dHlwZW5hbWUgX2MyX3JlZHVjZV9lbnVtX3RvX3VuZGVybHlpbmdfdHlwZTxkZWNsdHlwZSh2YWx1ZSk+Ojp0eXBlOwotICAgICAgICAgICAgaWYgKHYuZ2V0KChDMlZhbHVlVHlwZSopJnZhbHVlKSAmJiBDMk1hcHBlcjo6bWFwKHZhbHVlLCAmdG8pKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRvOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEMyVmFsdWUoKTsKLSAgICAgICAgfSkpOworICAgICAgICAud2l0aE1hcHBlcnMocGNtRW5jb2RpbmdNYXBwZXIsIHBjbUVuY29kaW5nUmV2ZXJzZSkpOworICAgIGFkZChDb25maWdNYXBwZXIoImFuZHJvaWQuX2NvZGVjLXBjbS1lbmNvZGluZyIsIEMyX1BBUkFNS0VZX1BDTV9FTkNPRElORywgInZhbHVlIikKKyAgICAgICAgLmxpbWl0VG8oRDo6QVVESU8gJiBEOjpSRUFEKQorICAgICAgICAud2l0aE1hcHBlcnMocGNtRW5jb2RpbmdNYXBwZXIsIHBjbUVuY29kaW5nUmV2ZXJzZSkpOwogCiAgICAgYWRkKENvbmZpZ01hcHBlcihLRVlfSVNfQURUUywgQzJfUEFSQU1LRVlfQUFDX1BBQ0tBR0lORywgInZhbHVlIikKICAgICAgICAgLmxpbWl0VG8oRDo6QVVESU8gJiBEOjpDT0RFRCkKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9Db2RlYzJJbmZvQnVpbGRlci5jcHAgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vQ29kZWMySW5mb0J1aWxkZXIuY3BwCmluZGV4IDdjNGJmYjYuLjY3ZDdlZDIgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9Db2RlYzJJbmZvQnVpbGRlci5jcHAKKysrIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0NvZGVjMkluZm9CdWlsZGVyLmNwcApAQCAtOTYsOSArOTYsMTIgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8vIGRldGVybWluZSBpZiBjb2RlYyBzdXBwb3J0cyBIRFIKKyAgICAvLyBkZXRlcm1pbmUgaWYgY29kZWMgc3VwcG9ydHMgSERSOyBpbXBseSAxMC1iaXQgc3VwcG9ydAogICAgIGJvb2wgc3VwcG9ydHNIZHIgPSBmYWxzZTsKKyAgICAvLyBkZXRlcm1pbmUgaWYgY29kZWMgc3VwcG9ydHMgSERSMTBQbHVzOyBpbXBseSAxMC1iaXQgc3VwcG9ydAogICAgIGJvb2wgc3VwcG9ydHNIZHIxMFBsdXMgPSBmYWxzZTsKKyAgICAvLyBkZXRlcm1pbmUgaWYgY29kZWMgc3VwcG9ydHMgMTAtYml0IGZvcm1hdAorICAgIGJvb2wgc3VwcG9ydHMxMEJpdCA9IGZhbHNlOwogCiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPj4gcGFyYW1EZXNjczsKICAgICBjMl9zdGF0dXNfdCBlcnIxID0gaW50Zi0+cXVlcnlTdXBwb3J0ZWRQYXJhbXMoJnBhcmFtRGVzY3MpOwpAQCAtMTI2LDYgKzEyOSwxMCBAQAogICAgIHN1cHBvcnRzSGRyIHw9IChtZWRpYVR5cGUgPT0gTUlNRVRZUEVfVklERU9fVlA5KTsKICAgICBzdXBwb3J0c0hkciB8PSAobWVkaWFUeXBlID09IE1JTUVUWVBFX1ZJREVPX0FWMSk7CiAKKyAgICAvLyBIRFIgc3VwcG9ydCBpbXBsaWVzIDEwLWJpdCBzdXBwb3J0LgorICAgIC8vIFRPRE86IGRpcmVjdGx5IGNoZWNrIHRoaXMgZnJvbSB0aGUgY29tcG9uZW50IGludGVyZmFjZQorICAgIHN1cHBvcnRzMTBCaXQgPSAoc3VwcG9ydHNIZHIgfHwgc3VwcG9ydHNIZHIxMFBsdXMpOworCiAgICAgYm9vbCBhZGRlZCA9IGZhbHNlOwogCiAgICAgZm9yIChDMlZhbHVlOjpQcmltaXRpdmUgcHJvZmlsZSA6IHByb2ZpbGVRdWVyeVswXS52YWx1ZXMudmFsdWVzKSB7CkBAIC0xNjUsNiArMTcyLDEyIEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3VwcG9ydHMxMEJpdCkgeworICAgICAgICAgICAgICAgIGF1dG8gYml0bmVzc01hcHBlciA9IEMyTWFwcGVyOjpHZXRCaXREZXB0aFByb2ZpbGVMZXZlbE1hcHBlcih0cmFpdC5tZWRpYVR5cGUsIDEwKTsKKyAgICAgICAgICAgICAgICBpZiAoYml0bmVzc01hcHBlciAmJiBiaXRuZXNzTWFwcGVyLT5tYXBQcm9maWxlKHBsLnByb2ZpbGUsICZzZGtQcm9maWxlKSkgeworICAgICAgICAgICAgICAgICAgICBjYXBzLT5hZGRQcm9maWxlTGV2ZWwoKHVpbnQzMl90KXNka1Byb2ZpbGUsICh1aW50MzJfdClzZGtMZXZlbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCFtYXBwZXIpIHsKICAgICAgICAgICAgIGNhcHMtPmFkZFByb2ZpbGVMZXZlbChwbC5wcm9maWxlLCBwbC5sZXZlbCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9GcmFtZVJlYXNzZW1ibGVyLmNwcCBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi9GcmFtZVJlYXNzZW1ibGVyLmNwcAppbmRleCBhZjA1NGM3Li5jYjhiNmFiIDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vRnJhbWVSZWFzc2VtYmxlci5jcHAKKysrIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL0ZyYW1lUmVhc3NlbWJsZXIuY3BwCkBAIC04OCw4ICs4OCw3IEBACiAgICAgICAgIGNvbnN0IHNwPE1lZGlhQ29kZWNCdWZmZXI+ICZidWZmZXIsCiAgICAgICAgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8QzJXb3JrPj4gKml0ZW1zKSB7CiAgICAgaW50NjRfdCB0aW1lVXM7Ci0gICAgaWYgKGJ1ZmZlci0+c2l6ZSgpID09IDB1Ci0gICAgICAgICAgICB8fCAhYnVmZmVyLT5tZXRhKCktPmZpbmRJbnQ2NCgidGltZVVzIiwgJnRpbWVVcykpIHsKKyAgICBpZiAoIWJ1ZmZlci0+bWV0YSgpLT5maW5kSW50NjQoInRpbWVVcyIsICZ0aW1lVXMpKSB7CiAgICAgICAgIHJldHVybiBDMl9CQURfVkFMVUU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdGVzdHMvQ0NvZGVjQ29uZmlnX3Rlc3QuY3BwIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL3Rlc3RzL0NDb2RlY0NvbmZpZ190ZXN0LmNwcAppbmRleCA3YzY2MGRjLi4zNjE1Mjg5IDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdGVzdHMvQ0NvZGVjQ29uZmlnX3Rlc3QuY3BwCisrKyBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi90ZXN0cy9DQ29kZWNDb25maWdfdGVzdC5jcHAKQEAgLTIyNCw2ICsyMjQsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29weTxDMlN0cmVhbUJpdHJhdGVJbmZvOjpvdXRwdXQsIEMyU3RyZWFtQml0cmF0ZUluZm86OmlucHV0PiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUlucHV0Qml0cmF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgYWRkUGFyYW1ldGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmluZVBhcmFtKG1PdXRwdXRQcm9maWxlTGV2ZWwsIEMyX1BBUkFNS0VZX1BST0ZJTEVfTEVWRUwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhEZWZhdWx0KG5ldyBDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86Om91dHB1dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB1LCBQUk9GSUxFX1VOVVNFRCwgTEVWRUxfVU5VU0VEKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aEZpZWxkcyh7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyRihtT3V0cHV0UHJvZmlsZUxldmVsLCBwcm9maWxlKS5hbnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzJGKG1PdXRwdXRQcm9maWxlTGV2ZWwsIGxldmVsKS5hbnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoU2V0dGVyKFNldHRlcjxDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86Om91dHB1dD4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIFRPRE86IG1vcmUgU0RLIHBhcmFtcwpAQCAtMjQxLDYgKzI1Miw4IEBACiAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8QzJTdHJlYW1QaXhlbEFzcGVjdFJhdGlvSW5mbzo6b3V0cHV0PiBtUGl4ZWxBc3BlY3RSYXRpbzsKICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUJpdHJhdGVJbmZvOjppbnB1dD4gbUlucHV0Qml0cmF0ZTsKICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbUJpdHJhdGVJbmZvOjpvdXRwdXQ+IG1PdXRwdXRCaXRyYXRlOworICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6aW5wdXQ+IG1JbnB1dFByb2ZpbGVMZXZlbDsKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86Om91dHB1dD4gbU91dHB1dFByb2ZpbGVMZXZlbDsKIAogICAgICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICAgICAgICAgIHN0YXRpYyBDMlIgU2V0dGVyKGJvb2wsIEMyUDxUPiAmKSB7CkBAIC01NzYsNCArNTg5LDUxIEBACiAgICAgICAgICAgICA8PCAibU91dHB1dEZvcm1hdCA9ICIgPDwgbUNvbmZpZy5tT3V0cHV0Rm9ybWF0LT5kZWJ1Z1N0cmluZygpLmNfc3RyKCk7CiB9CiAKK3R5cGVkZWYgc3RkOjp0dXBsZTxzdGQ6OnN0cmluZywgQzJDb25maWc6OnByb2ZpbGVfdCwgaW50MzJfdD4gSGRyUHJvZmlsZXNQYXJhbXM7CisKK2NsYXNzIEhkclByb2ZpbGVzVGVzdAorICAgIDogcHVibGljIENDb2RlY0NvbmZpZ1Rlc3QsCisgICAgICBwdWJsaWMgOjp0ZXN0aW5nOjpXaXRoUGFyYW1JbnRlcmZhY2U8SGRyUHJvZmlsZXNQYXJhbXM+IHsKK307CisKK1RFU1RfUChIZHJQcm9maWxlc1Rlc3QsIFNldEZyb21TZGspIHsKKyAgICBIZHJQcm9maWxlc1BhcmFtcyBwYXJhbXMgPSBHZXRQYXJhbSgpOworICAgIHN0ZDo6c3RyaW5nIG1lZGlhVHlwZSA9IHN0ZDo6Z2V0PDA+KHBhcmFtcyk7CisgICAgQzJDb25maWc6OnByb2ZpbGVfdCBjMlByb2ZpbGUgPSBzdGQ6OmdldDwxPihwYXJhbXMpOworICAgIGludDMyX3Qgc2RrUHJvZmlsZSA9IHN0ZDo6Z2V0PDI+KHBhcmFtcyk7CisKKyAgICBpbml0KEMyQ29tcG9uZW50OjpET01BSU5fVklERU8sIEMyQ29tcG9uZW50OjpLSU5EX0VOQ09ERVIsIG1lZGlhVHlwZS5jX3N0cigpKTsKKworICAgIEFTU0VSVF9FUShPSywgbUNvbmZpZy5pbml0aWFsaXplKG1SZWZsZWN0b3IsIG1Db25maWd1cmFibGUpKTsKKworICAgIHNwPEFNZXNzYWdlPiBmb3JtYXR7bmV3IEFNZXNzYWdlfTsKKyAgICBmb3JtYXQtPnNldEludDMyKEtFWV9QUk9GSUxFLCBzZGtQcm9maWxlKTsKKworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDMlBhcmFtPj4gY29uZmlnVXBkYXRlOworICAgIEFTU0VSVF9FUShPSywgbUNvbmZpZy5nZXRDb25maWdVcGRhdGVGcm9tU2RrUGFyYW1zKAorICAgICAgICAgICAgbUNvbmZpZ3VyYWJsZSwgZm9ybWF0LCBEOjpBTEwsIEMyX01BWV9CTE9DSywgJmNvbmZpZ1VwZGF0ZSkpOworCisgICAgQVNTRVJUX0VRKDF1LCBjb25maWdVcGRhdGUuc2l6ZSgpKTsKKyAgICBDMlN0cmVhbVByb2ZpbGVMZXZlbEluZm86OmlucHV0ICpwbCA9CisgICAgICAgIEZpbmRQYXJhbTxzdGQ6OnJlbW92ZV9wb2ludGVyPGRlY2x0eXBlKHBsKT46OnR5cGU+KGNvbmZpZ1VwZGF0ZSk7CisgICAgQVNTRVJUX05FKG51bGxwdHIsIHBsKTsKKyAgICBBU1NFUlRfRVEoYzJQcm9maWxlLCBwbC0+cHJvZmlsZSk7Cit9CisKK0hkclByb2ZpbGVzUGFyYW1zIGtIZHJQcm9maWxlc1BhcmFtc1tdID0geworICAgIHN0ZDo6bWFrZV90dXBsZShNSU1FVFlQRV9WSURFT19IRVZDLCBQUk9GSUxFX0hFVkNfTUFJTl8xMCwgSEVWQ1Byb2ZpbGVNYWluMTBIRFIxMCksCisgICAgc3RkOjptYWtlX3R1cGxlKE1JTUVUWVBFX1ZJREVPX0hFVkMsIFBST0ZJTEVfSEVWQ19NQUlOXzEwLCBIRVZDUHJvZmlsZU1haW4xMEhEUjEwUGx1cyksCisgICAgc3RkOjptYWtlX3R1cGxlKE1JTUVUWVBFX1ZJREVPX1ZQOSwgIFBST0ZJTEVfVlA5XzIsICAgICAgICBWUDlQcm9maWxlMkhEUiksCisgICAgc3RkOjptYWtlX3R1cGxlKE1JTUVUWVBFX1ZJREVPX1ZQOSwgIFBST0ZJTEVfVlA5XzIsICAgICAgICBWUDlQcm9maWxlMkhEUjEwUGx1cyksCisgICAgc3RkOjptYWtlX3R1cGxlKE1JTUVUWVBFX1ZJREVPX1ZQOSwgIFBST0ZJTEVfVlA5XzMsICAgICAgICBWUDlQcm9maWxlM0hEUiksCisgICAgc3RkOjptYWtlX3R1cGxlKE1JTUVUWVBFX1ZJREVPX1ZQOSwgIFBST0ZJTEVfVlA5XzMsICAgICAgICBWUDlQcm9maWxlM0hEUjEwUGx1cyksCisgICAgc3RkOjptYWtlX3R1cGxlKE1JTUVUWVBFX1ZJREVPX0FWMSwgIFBST0ZJTEVfQVYxXzAsICAgICAgICBBVjFQcm9maWxlTWFpbjEwSERSMTApLAorICAgIHN0ZDo6bWFrZV90dXBsZShNSU1FVFlQRV9WSURFT19BVjEsICBQUk9GSUxFX0FWMV8wLCAgICAgICAgQVYxUHJvZmlsZU1haW4xMEhEUjEwUGx1cyksCit9OworCitJTlNUQU5USUFURV9URVNUX1NVSVRFX1AoCisgICAgICAgIENDb2RlY0NvbmZpZywKKyAgICAgICAgSGRyUHJvZmlsZXNUZXN0LAorICAgICAgICA6OnRlc3Rpbmc6OlZhbHVlc0luKGtIZHJQcm9maWxlc1BhcmFtcykpOworCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdGVzdHMvRnJhbWVSZWFzc2VtYmxlcl90ZXN0LmNwcCBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi90ZXN0cy9GcmFtZVJlYXNzZW1ibGVyX3Rlc3QuY3BwCmluZGV4IDY3MzhlZTcuLjBiZTkzNGEgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi90ZXN0cy9GcmFtZVJlYXNzZW1ibGVyX3Rlc3QuY3BwCisrKyBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi90ZXN0cy9GcmFtZVJlYXNzZW1ibGVyX3Rlc3QuY3BwCkBAIC01Myw3ICs1Myw4IEBACiAgICAgICAgICAgICBDMkNvbmZpZzo6cGNtX2VuY29kaW5nX3QgZW5jb2RpbmcsCiAgICAgICAgICAgICBzaXplX3QgaW5wdXRGcmFtZVNpemVJbkJ5dGVzLAogICAgICAgICAgICAgc2l6ZV90IGNvdW50LAotICAgICAgICAgICAgc2l6ZV90IGV4cGVjdGVkT3V0cHV0U2l6ZSkgeworICAgICAgICAgICAgc2l6ZV90IGV4cGVjdGVkT3V0cHV0U2l6ZSwKKyAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVFb3MpIHsKICAgICAgICAgRnJhbWVSZWFzc2VtYmxlciBmcmFtZVJlYXNzZW1ibGVyOwogICAgICAgICBmcmFtZVJlYXNzZW1ibGVyLmluaXQoCiAgICAgICAgICAgICAgICAgbVBvb2wsCkBAIC02Nyw3ICs2OCw3IEBACiAKICAgICAgICAgc2l6ZV90IGlucHV0SW5kZXggPSAwLCBvdXRwdXRJbmRleCA9IDA7CiAgICAgICAgIHNpemVfdCBleHBlY3RDb3VudCA9IDA7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50ICsgKHNlcGFyYXRlRW9zID8gMSA6IDApOyArK2kpIHsKICAgICAgICAgICAgIHNwPE1lZGlhQ29kZWNCdWZmZXI+IGJ1ZmZlciA9IG5ldyBNZWRpYUNvZGVjQnVmZmVyKAogICAgICAgICAgICAgICAgICAgICBuZXcgQU1lc3NhZ2UsIG5ldyBBQnVmZmVyKGlucHV0RnJhbWVTaXplSW5CeXRlcykpOwogICAgICAgICAgICAgYnVmZmVyLT5zZXRSYW5nZSgwLCBpbnB1dEZyYW1lU2l6ZUluQnl0ZXMpOwpAQCAtNzcsOCArNzgsMTIgQEAKICAgICAgICAgICAgIGlmIChpID09IGNvdW50IC0gMSkgewogICAgICAgICAgICAgICAgIGJ1ZmZlci0+bWV0YSgpLT5zZXRJbnQzMigiZW9zIiwgMSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGlucHV0RnJhbWVTaXplSW5CeXRlczsgKytqLCArK2lucHV0SW5kZXgpIHsKLSAgICAgICAgICAgICAgICBidWZmZXItPmJhc2UoKVtqXSA9IChpbnB1dEluZGV4ICYgMHhGRik7CisgICAgICAgICAgICBpZiAoaSA9PSBjb3VudCAmJiBzZXBhcmF0ZUVvcykgeworICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0UmFuZ2UoMCwgMCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgaW5wdXRGcmFtZVNpemVJbkJ5dGVzOyArK2osICsraW5wdXRJbmRleCkgeworICAgICAgICAgICAgICAgICAgICBidWZmZXItPmJhc2UoKVtqXSA9IChpbnB1dEluZGV4ICYgMHhGRik7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3RkOjpsaXN0PHN0ZDo6dW5pcXVlX3B0cjxDMldvcms+PiBpdGVtczsKICAgICAgICAgICAgIEFTU0VSVF9FUShDMl9PSywgZnJhbWVSZWFzc2VtYmxlci5wcm9jZXNzKGJ1ZmZlciwgJml0ZW1zKSk7CkBAIC0xMDUsNyArMTEwLDggQEAKICAgICAgICAgICAgICAgICBBU1NFUlRfRVEoZW5jb2RlckZyYW1lU2l6ZSAqIEJ5dGVzUGVyU2FtcGxlKGVuY29kaW5nKSwgdmlldy5jYXBhY2l0eSgpKTsKICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHZpZXcuY2FwYWNpdHkoKTsgKytqLCArK291dHB1dEluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9UUlVFKG91dHB1dEluZGV4IDwgaW5wdXRJbmRleAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBpbnB1dEluZGV4ID09IGlucHV0RnJhbWVTaXplSW5CeXRlcyAqIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgaW5wdXRJbmRleCA9PSBpbnB1dEZyYW1lU2l6ZUluQnl0ZXMgKiBjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJpbnB1dEluZGV4ID0gIiA8PCBpbnB1dEluZGV4IDw8ICIgb3V0cHV0SW5kZXggPSAiIDw8IG91dHB1dEluZGV4OwogICAgICAgICAgICAgICAgICAgICB1aW50OF90IGV4cGVjdGVkID0gb3V0cHV0SW5kZXggPCBpbnB1dEluZGV4ID8gKG91dHB1dEluZGV4ICYgMHhGRikgOiAwOwogICAgICAgICAgICAgICAgICAgICBpZiAoZXhwZWN0Q291bnQgPCAxMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgKytleHBlY3RDb3VudDsKQEAgLTEzNywyMDQgKzE0MywyMzkgQEAKIC8vIFB1c2ggZnJhbWVzIHdpdGggZXhhY3RseSB0aGUgc2FtZSBzaXplIGFzIHRoZSBlbmNvZGVyIHJlcXVlc3RlZC4KIFRFU1RfRihGcmFtZVJlYXNzZW1ibGVyVGVzdCwgUHVzaEV4YWN0RnJhbWVTaXplKSB7CiAgICAgQVNTRVJUX0VRKE9LLCBpbml0U3RhdHVzKCkpOwotICAgIHRlc3RQdXNoU2FtZVNpemUoCi0gICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKLSAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAotICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAotICAgICAgICAgICAgUENNXzgsCi0gICAgICAgICAgICAxMDI0IC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgPSAxMDI0IHNhbXBsZXMgKiAxIGNoYW5uZWwgKiAxIGJ5dGVzL3NhbXBsZSAqLywKLSAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAotICAgICAgICAgICAgMTAyNDAgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSAxMCAqIDEwMjQgYnl0ZXMvZnJhbWUgKi8pOwotICAgIHRlc3RQdXNoU2FtZVNpemUoCi0gICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKLSAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAotICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAotICAgICAgICAgICAgUENNXzE2LAotICAgICAgICAgICAgMjA0OCAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gMTAyNCBzYW1wbGVzICogMSBjaGFubmVsICogMiBieXRlcy9zYW1wbGUgKi8sCi0gICAgICAgICAgICAxMCAvKiBjb3VudCAqLywKLSAgICAgICAgICAgIDIwNDgwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMTAgKiAyMDQ4IGJ5dGVzL2ZyYW1lICovKTsKLSAgICB0ZXN0UHVzaFNhbWVTaXplKAotICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCi0gICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKLSAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKLSAgICAgICAgICAgIFBDTV9GTE9BVCwKLSAgICAgICAgICAgIDQwOTYgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDEwMjQgc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDQgYnl0ZXMvc2FtcGxlICovLAotICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCi0gICAgICAgICAgICA0MDk2MCAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDEwICogNDA5NiBieXRlcy9mcmFtZSAqLyk7CisgICAgZm9yIChib29sIHNlcGFyYXRlRW9zIDoge2ZhbHNlLCB0cnVlfSkgeworICAgICAgICB0ZXN0UHVzaFNhbWVTaXplKAorICAgICAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAorICAgICAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAorICAgICAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKKyAgICAgICAgICAgICAgICBQQ01fOCwKKyAgICAgICAgICAgICAgICAxMDI0IC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgPSAxMDI0IHNhbXBsZXMgKiAxIGNoYW5uZWwgKiAxIGJ5dGVzL3NhbXBsZSAqLywKKyAgICAgICAgICAgICAgICAxMCAvKiBjb3VudCAqLywKKyAgICAgICAgICAgICAgICAxMDI0MCAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDEwICogMTAyNCBieXRlcy9mcmFtZSAqLywKKyAgICAgICAgICAgICAgICBzZXBhcmF0ZUVvcyk7CisgICAgICAgIHRlc3RQdXNoU2FtZVNpemUoCisgICAgICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCisgICAgICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCisgICAgICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAorICAgICAgICAgICAgICAgIFBDTV8xNiwKKyAgICAgICAgICAgICAgICAyMDQ4IC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgPSAxMDI0IHNhbXBsZXMgKiAxIGNoYW5uZWwgKiAyIGJ5dGVzL3NhbXBsZSAqLywKKyAgICAgICAgICAgICAgICAxMCAvKiBjb3VudCAqLywKKyAgICAgICAgICAgICAgICAyMDQ4MCAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDEwICogMjA0OCBieXRlcy9mcmFtZSAqLywKKyAgICAgICAgICAgICAgICBzZXBhcmF0ZUVvcyk7CisgICAgICAgIHRlc3RQdXNoU2FtZVNpemUoCisgICAgICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCisgICAgICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCisgICAgICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAorICAgICAgICAgICAgICAgIFBDTV9GTE9BVCwKKyAgICAgICAgICAgICAgICA0MDk2IC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgPSAxMDI0IHNhbXBsZXMgKiAxIGNoYW5uZWwgKiA0IGJ5dGVzL3NhbXBsZSAqLywKKyAgICAgICAgICAgICAgICAxMCAvKiBjb3VudCAqLywKKyAgICAgICAgICAgICAgICA0MDk2MCAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDEwICogNDA5NiBieXRlcy9mcmFtZSAqLywKKyAgICAgICAgICAgICAgICBzZXBhcmF0ZUVvcyk7CisgICAgfQogfQogCiAvLyBQdXNoIGZyYW1lcyB3aXRoIGhhbGYgdGhlIHNpemUgdGhhdCB0aGUgZW5jb2RlciByZXF1ZXN0ZWQuCiBURVNUX0YoRnJhbWVSZWFzc2VtYmxlclRlc3QsIFB1c2hIYWxmRnJhbWVTaXplKSB7CiAgICAgQVNTRVJUX0VRKE9LLCBpbml0U3RhdHVzKCkpOwotICAgIHRlc3RQdXNoU2FtZVNpemUoCi0gICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKLSAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAotICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAotICAgICAgICAgICAgUENNXzgsCi0gICAgICAgICAgICA1MTIgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDUxMiBzYW1wbGVzICogMSBjaGFubmVsICogMSBieXRlcyBwZXIgc2FtcGxlICovLAotICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCi0gICAgICAgICAgICA1MTIwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gNSAqIDEwMjQgYnl0ZXMvZnJhbWUgKi8pOwotICAgIHRlc3RQdXNoU2FtZVNpemUoCi0gICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKLSAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAotICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAotICAgICAgICAgICAgUENNXzE2LAotICAgICAgICAgICAgMTAyNCAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gNTEyIHNhbXBsZXMgKiAxIGNoYW5uZWwgKiAyIGJ5dGVzIHBlciBzYW1wbGUgKi8sCi0gICAgICAgICAgICAxMCAvKiBjb3VudCAqLywKLSAgICAgICAgICAgIDEwMjQwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gNSAqIDIwNDggYnl0ZXMvZnJhbWUgKi8pOwotICAgIHRlc3RQdXNoU2FtZVNpemUoCi0gICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKLSAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAotICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAotICAgICAgICAgICAgUENNX0ZMT0FULAotICAgICAgICAgICAgMjA0OCAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gNTEyIHNhbXBsZXMgKiAxIGNoYW5uZWwgKiA0IGJ5dGVzIHBlciBzYW1wbGUgKi8sCi0gICAgICAgICAgICAxMCAvKiBjb3VudCAqLywKLSAgICAgICAgICAgIDIwNDgwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gNSAqIDQwOTYgYnl0ZXMvZnJhbWUgKi8pOworICAgIGZvciAoYm9vbCBzZXBhcmF0ZUVvcyA6IHtmYWxzZSwgdHJ1ZX0pIHsKKyAgICAgICAgdGVzdFB1c2hTYW1lU2l6ZSgKKyAgICAgICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKKyAgICAgICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKKyAgICAgICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCisgICAgICAgICAgICAgICAgUENNXzgsCisgICAgICAgICAgICAgICAgNTEyIC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgPSA1MTIgc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDEgYnl0ZXMvc2FtcGxlICovLAorICAgICAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAorICAgICAgICAgICAgICAgIDUxMjAgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSA1ICogMTAyNCBieXRlcy9mcmFtZSAqLywKKyAgICAgICAgICAgICAgICBzZXBhcmF0ZUVvcyk7CisgICAgICAgIHRlc3RQdXNoU2FtZVNpemUoCisgICAgICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCisgICAgICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCisgICAgICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAorICAgICAgICAgICAgICAgIFBDTV8xNiwKKyAgICAgICAgICAgICAgICAxMDI0IC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgPSA1MTIgc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDIgYnl0ZXMvc2FtcGxlICovLAorICAgICAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAorICAgICAgICAgICAgICAgIDEwMjQwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gNSAqIDIwNDggYnl0ZXMvZnJhbWUgKi8sCisgICAgICAgICAgICAgICAgc2VwYXJhdGVFb3MpOworICAgICAgICB0ZXN0UHVzaFNhbWVTaXplKAorICAgICAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAorICAgICAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAorICAgICAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKKyAgICAgICAgICAgICAgICBQQ01fRkxPQVQsCisgICAgICAgICAgICAgICAgMjA0OCAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gNTEyIHNhbXBsZXMgKiAxIGNoYW5uZWwgKiA0IGJ5dGVzL3NhbXBsZSAqLywKKyAgICAgICAgICAgICAgICAxMCAvKiBjb3VudCAqLywKKyAgICAgICAgICAgICAgICAyMDQ4MCAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDUgKiA0MDk2IGJ5dGVzL2ZyYW1lICovLAorICAgICAgICAgICAgICAgIHNlcGFyYXRlRW9zKTsKKyAgICB9CiB9CiAKIC8vIFB1c2ggZnJhbWVzIHdpdGggdHdpY2UgdGhlIHNpemUgdGhhdCB0aGUgZW5jb2RlciByZXF1ZXN0ZWQuCiBURVNUX0YoRnJhbWVSZWFzc2VtYmxlclRlc3QsIFB1c2hEb3VibGVGcmFtZVNpemUpIHsKICAgICBBU1NFUlRfRVEoT0ssIGluaXRTdGF0dXMoKSk7Ci0gICAgdGVzdFB1c2hTYW1lU2l6ZSgKLSAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAotICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCi0gICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCi0gICAgICAgICAgICBQQ01fOCwKLSAgICAgICAgICAgIDIwNDggLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDIwNDggc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDEgYnl0ZXMgcGVyIHNhbXBsZSAqLywKLSAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAotICAgICAgICAgICAgMjA0ODAgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSAyMCAqIDEwMjQgYnl0ZXMvZnJhbWUgKi8pOwotICAgIHRlc3RQdXNoU2FtZVNpemUoCi0gICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKLSAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAotICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAotICAgICAgICAgICAgUENNXzE2LAotICAgICAgICAgICAgNDA5NiAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gMjA0OCBzYW1wbGVzICogMSBjaGFubmVsICogMiBieXRlcyBwZXIgc2FtcGxlICovLAotICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCi0gICAgICAgICAgICA0MDk2MCAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDIwICogMjA0OCBieXRlcy9mcmFtZSAqLyk7Ci0gICAgdGVzdFB1c2hTYW1lU2l6ZSgKLSAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAotICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCi0gICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCi0gICAgICAgICAgICBQQ01fRkxPQVQsCi0gICAgICAgICAgICA4MTkyIC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgPSAyMDQ4IHNhbXBsZXMgKiAxIGNoYW5uZWwgKiA0IGJ5dGVzIHBlciBzYW1wbGUgKi8sCi0gICAgICAgICAgICAxMCAvKiBjb3VudCAqLywKLSAgICAgICAgICAgIDgxOTIwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMjAgKiA0MDk2IGJ5dGVzL2ZyYW1lICovKTsKKyAgICBmb3IgKGJvb2wgc2VwYXJhdGVFb3MgOiB7ZmFsc2UsIHRydWV9KSB7CisgICAgICAgIHRlc3RQdXNoU2FtZVNpemUoCisgICAgICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCisgICAgICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCisgICAgICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAorICAgICAgICAgICAgICAgIFBDTV84LAorICAgICAgICAgICAgICAgIDIwNDggLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDIwNDggc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDEgYnl0ZXMvc2FtcGxlICovLAorICAgICAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAorICAgICAgICAgICAgICAgIDIwNDgwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMjAgKiAxMDI0IGJ5dGVzL2ZyYW1lICovLAorICAgICAgICAgICAgICAgIHNlcGFyYXRlRW9zKTsKKyAgICAgICAgdGVzdFB1c2hTYW1lU2l6ZSgKKyAgICAgICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKKyAgICAgICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKKyAgICAgICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCisgICAgICAgICAgICAgICAgUENNXzE2LAorICAgICAgICAgICAgICAgIDQwOTYgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDIwNDggc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDIgYnl0ZXMvc2FtcGxlICovLAorICAgICAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAorICAgICAgICAgICAgICAgIDQwOTYwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMjAgKiAyMDQ4IGJ5dGVzL2ZyYW1lICovLAorICAgICAgICAgICAgICAgIHNlcGFyYXRlRW9zKTsKKyAgICAgICAgdGVzdFB1c2hTYW1lU2l6ZSgKKyAgICAgICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKKyAgICAgICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKKyAgICAgICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCisgICAgICAgICAgICAgICAgUENNX0ZMT0FULAorICAgICAgICAgICAgICAgIDgxOTIgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDIwNDggc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDQgYnl0ZXMvc2FtcGxlICovLAorICAgICAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAorICAgICAgICAgICAgICAgIDgxOTIwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMjAgKiA0MDk2IGJ5dGVzL2ZyYW1lICovLAorICAgICAgICAgICAgICAgIHNlcGFyYXRlRW9zKTsKKyAgICB9CiB9CiAKIC8vIFB1c2ggZnJhbWVzIHdpdGggYSBsaXR0bGUgYml0IGxhcmdlciAoKzUgc2FtcGxlcykgdGhhbiB0aGUgcmVxdWVzdGVkIHNpemUuCiBURVNUX0YoRnJhbWVSZWFzc2VtYmxlclRlc3QsIFB1c2hMaXR0bGVMYXJnZXJGcmFtZVNpemUpIHsKICAgICBBU1NFUlRfRVEoT0ssIGluaXRTdGF0dXMoKSk7Ci0gICAgdGVzdFB1c2hTYW1lU2l6ZSgKLSAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAotICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCi0gICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCi0gICAgICAgICAgICBQQ01fOCwKLSAgICAgICAgICAgIDEwMjkgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDEwMjkgc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDEgYnl0ZXMgcGVyIHNhbXBsZSAqLywKLSAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAotICAgICAgICAgICAgMTEyNjQgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSAxMSAqIDEwMjQgYnl0ZXMvZnJhbWUgKi8pOwotICAgIHRlc3RQdXNoU2FtZVNpemUoCi0gICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKLSAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAotICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAotICAgICAgICAgICAgUENNXzE2LAotICAgICAgICAgICAgMjA1OCAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gMTAyOSBzYW1wbGVzICogMSBjaGFubmVsICogMiBieXRlcyBwZXIgc2FtcGxlICovLAotICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCi0gICAgICAgICAgICAyMjUyOCAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDExICogMjA0OCBieXRlcy9mcmFtZSAqLyk7Ci0gICAgdGVzdFB1c2hTYW1lU2l6ZSgKLSAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAotICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCi0gICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCi0gICAgICAgICAgICBQQ01fRkxPQVQsCi0gICAgICAgICAgICA0MTE2IC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgPSAxMDI5IHNhbXBsZXMgKiAxIGNoYW5uZWwgKiA0IGJ5dGVzIHBlciBzYW1wbGUgKi8sCi0gICAgICAgICAgICAxMCAvKiBjb3VudCAqLywKLSAgICAgICAgICAgIDQ1MDU2IC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMTEgKiA0MDk2IGJ5dGVzL2ZyYW1lICovKTsKKyAgICBmb3IgKGJvb2wgc2VwYXJhdGVFb3MgOiB7ZmFsc2UsIHRydWV9KSB7CisgICAgICAgIHRlc3RQdXNoU2FtZVNpemUoCisgICAgICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCisgICAgICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCisgICAgICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAorICAgICAgICAgICAgICAgIFBDTV84LAorICAgICAgICAgICAgICAgIDEwMjkgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDEwMjkgc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDEgYnl0ZXMvc2FtcGxlICovLAorICAgICAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAorICAgICAgICAgICAgICAgIDExMjY0IC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMTEgKiAxMDI0IGJ5dGVzL2ZyYW1lICovLAorICAgICAgICAgICAgICAgIHNlcGFyYXRlRW9zKTsKKyAgICAgICAgdGVzdFB1c2hTYW1lU2l6ZSgKKyAgICAgICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKKyAgICAgICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKKyAgICAgICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCisgICAgICAgICAgICAgICAgUENNXzE2LAorICAgICAgICAgICAgICAgIDIwNTggLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDEwMjkgc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDIgYnl0ZXMvc2FtcGxlICovLAorICAgICAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAorICAgICAgICAgICAgICAgIDIyNTI4IC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMTEgKiAyMDQ4IGJ5dGVzL2ZyYW1lICovLAorICAgICAgICAgICAgICAgIHNlcGFyYXRlRW9zKTsKKyAgICAgICAgdGVzdFB1c2hTYW1lU2l6ZSgKKyAgICAgICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKKyAgICAgICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKKyAgICAgICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCisgICAgICAgICAgICAgICAgUENNX0ZMT0FULAorICAgICAgICAgICAgICAgIDQxMTYgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDEwMjkgc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDQgYnl0ZXMvc2FtcGxlICovLAorICAgICAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAorICAgICAgICAgICAgICAgIDQ1MDU2IC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMTEgKiA0MDk2IGJ5dGVzL2ZyYW1lICovLAorICAgICAgICAgICAgICAgIHNlcGFyYXRlRW9zKTsKKyAgICB9CiB9CiAKIC8vIFB1c2ggZnJhbWVzIHdpdGggYSBsaXR0bGUgYml0IHNtYWxsZXIgKC01IHNhbXBsZXMpIHRoYW4gdGhlIHJlcXVlc3RlZCBzaXplLgogVEVTVF9GKEZyYW1lUmVhc3NlbWJsZXJUZXN0LCBQdXNoTGl0dGxlU21hbGxlckZyYW1lU2l6ZSkgewogICAgIEFTU0VSVF9FUShPSywgaW5pdFN0YXR1cygpKTsKLSAgICB0ZXN0UHVzaFNhbWVTaXplKAotICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCi0gICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKLSAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKLSAgICAgICAgICAgIFBDTV84LAotICAgICAgICAgICAgMTAxOSAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gMTAxOSBzYW1wbGVzICogMSBjaGFubmVsICogMSBieXRlcyBwZXIgc2FtcGxlICovLAotICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCi0gICAgICAgICAgICAxMDI0MCAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDEwICogMTAyNCBieXRlcy9mcmFtZSAqLyk7Ci0gICAgdGVzdFB1c2hTYW1lU2l6ZSgKLSAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAotICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCi0gICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCi0gICAgICAgICAgICBQQ01fMTYsCi0gICAgICAgICAgICAyMDM4IC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgPSAxMDE5IHNhbXBsZXMgKiAxIGNoYW5uZWwgKiAyIGJ5dGVzIHBlciBzYW1wbGUgKi8sCi0gICAgICAgICAgICAxMCAvKiBjb3VudCAqLywKLSAgICAgICAgICAgIDIwNDgwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMTAgKiAyMDQ4IGJ5dGVzL2ZyYW1lICovKTsKLSAgICB0ZXN0UHVzaFNhbWVTaXplKAotICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCi0gICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKLSAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKLSAgICAgICAgICAgIFBDTV9GTE9BVCwKLSAgICAgICAgICAgIDQwNzYgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyA9IDEwMTkgc2FtcGxlcyAqIDEgY2hhbm5lbCAqIDQgYnl0ZXMgcGVyIHNhbXBsZSAqLywKLSAgICAgICAgICAgIDEwIC8qIGNvdW50ICovLAotICAgICAgICAgICAgNDA5NjAgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSAxMCAqIDQwOTYgYnl0ZXMvZnJhbWUgKi8pOworICAgIGZvciAoYm9vbCBzZXBhcmF0ZUVvcyA6IHtmYWxzZSwgdHJ1ZX0pIHsKKyAgICAgICAgdGVzdFB1c2hTYW1lU2l6ZSgKKyAgICAgICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKKyAgICAgICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKKyAgICAgICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCisgICAgICAgICAgICAgICAgUENNXzgsCisgICAgICAgICAgICAgICAgMTAxOSAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gMTAxOSBzYW1wbGVzICogMSBjaGFubmVsICogMSBieXRlcy9zYW1wbGUgKi8sCisgICAgICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCisgICAgICAgICAgICAgICAgMTAyNDAgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSAxMCAqIDEwMjQgYnl0ZXMvZnJhbWUgKi8sCisgICAgICAgICAgICAgICAgc2VwYXJhdGVFb3MpOworICAgICAgICB0ZXN0UHVzaFNhbWVTaXplKAorICAgICAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAorICAgICAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAorICAgICAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKKyAgICAgICAgICAgICAgICBQQ01fMTYsCisgICAgICAgICAgICAgICAgMjAzOCAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gMTAxOSBzYW1wbGVzICogMSBjaGFubmVsICogMiBieXRlcy9zYW1wbGUgKi8sCisgICAgICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCisgICAgICAgICAgICAgICAgMjA0ODAgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSAxMCAqIDIwNDggYnl0ZXMvZnJhbWUgKi8sCisgICAgICAgICAgICAgICAgc2VwYXJhdGVFb3MpOworICAgICAgICB0ZXN0UHVzaFNhbWVTaXplKAorICAgICAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAorICAgICAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAorICAgICAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKKyAgICAgICAgICAgICAgICBQQ01fRkxPQVQsCisgICAgICAgICAgICAgICAgNDA3NiAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzID0gMTAxOSBzYW1wbGVzICogMSBjaGFubmVsICogNCBieXRlcy9zYW1wbGUgKi8sCisgICAgICAgICAgICAgICAgMTAgLyogY291bnQgKi8sCisgICAgICAgICAgICAgICAgNDA5NjAgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSAxMCAqIDQwOTYgYnl0ZXMvZnJhbWUgKi8sCisgICAgICAgICAgICAgICAgc2VwYXJhdGVFb3MpOworICAgIH0KIH0KIAogLy8gUHVzaCBzaW5nbGUtYnl0ZSBmcmFtZXMKIFRFU1RfRihGcmFtZVJlYXNzZW1ibGVyVGVzdCwgUHVzaFNpbmdsZUJ5dGUpIHsKICAgICBBU1NFUlRfRVEoT0ssIGluaXRTdGF0dXMoKSk7Ci0gICAgdGVzdFB1c2hTYW1lU2l6ZSgKLSAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAotICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCi0gICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCi0gICAgICAgICAgICBQQ01fOCwKLSAgICAgICAgICAgIDEgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyAqLywKLSAgICAgICAgICAgIDEwMDAwMCAvKiBjb3VudCAqLywKLSAgICAgICAgICAgIDEwMDM1MiAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDk4ICogMTAyNCBieXRlcy9mcmFtZSAqLyk7Ci0gICAgdGVzdFB1c2hTYW1lU2l6ZSgKLSAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAotICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCi0gICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCi0gICAgICAgICAgICBQQ01fMTYsCi0gICAgICAgICAgICAxIC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgKi8sCi0gICAgICAgICAgICAxMDAwMDAgLyogY291bnQgKi8sCi0gICAgICAgICAgICAxMDAzNTIgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSA0OSAqIDIwNDggYnl0ZXMvZnJhbWUgKi8pOwotICAgIHRlc3RQdXNoU2FtZVNpemUoCi0gICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKLSAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAotICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAotICAgICAgICAgICAgUENNX0ZMT0FULAotICAgICAgICAgICAgMSAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzICovLAotICAgICAgICAgICAgMTAwMDAwIC8qIGNvdW50ICovLAotICAgICAgICAgICAgMTAyNDAwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMjUgKiA0MDk2IGJ5dGVzL2ZyYW1lICovKTsKKyAgICBmb3IgKGJvb2wgc2VwYXJhdGVFb3MgOiB7ZmFsc2UsIHRydWV9KSB7CisgICAgICAgIHRlc3RQdXNoU2FtZVNpemUoCisgICAgICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCisgICAgICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCisgICAgICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAorICAgICAgICAgICAgICAgIFBDTV84LAorICAgICAgICAgICAgICAgIDEgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyAqLywKKyAgICAgICAgICAgICAgICAxMDAwMDAgLyogY291bnQgKi8sCisgICAgICAgICAgICAgICAgMTAwMzUyIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gOTggKiAxMDI0IGJ5dGVzL2ZyYW1lICovLAorICAgICAgICAgICAgICAgIHNlcGFyYXRlRW9zKTsKKyAgICAgICAgdGVzdFB1c2hTYW1lU2l6ZSgKKyAgICAgICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKKyAgICAgICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKKyAgICAgICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCisgICAgICAgICAgICAgICAgUENNXzE2LAorICAgICAgICAgICAgICAgIDEgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyAqLywKKyAgICAgICAgICAgICAgICAxMDAwMDAgLyogY291bnQgKi8sCisgICAgICAgICAgICAgICAgMTAwMzUyIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gNDkgKiAyMDQ4IGJ5dGVzL2ZyYW1lICovLAorICAgICAgICAgICAgICAgIHNlcGFyYXRlRW9zKTsKKyAgICAgICAgdGVzdFB1c2hTYW1lU2l6ZSgKKyAgICAgICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKKyAgICAgICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKKyAgICAgICAgICAgICAgICAxIC8qIGNoYW5uZWwgY291bnQgKi8sCisgICAgICAgICAgICAgICAgUENNX0ZMT0FULAorICAgICAgICAgICAgICAgIDEgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyAqLywKKyAgICAgICAgICAgICAgICAxMDAwMDAgLyogY291bnQgKi8sCisgICAgICAgICAgICAgICAgMTAyNDAwIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gMjUgKiA0MDk2IGJ5dGVzL2ZyYW1lICovLAorICAgICAgICAgICAgICAgIHNlcGFyYXRlRW9zKTsKKyAgICB9CiB9CiAKIC8vIFB1c2ggb25lIGJpZyBjaHVuay4KIFRFU1RfRihGcmFtZVJlYXNzZW1ibGVyVGVzdCwgUHVzaEJpZ0NodW5rKSB7CiAgICAgQVNTRVJUX0VRKE9LLCBpbml0U3RhdHVzKCkpOwotICAgIHRlc3RQdXNoU2FtZVNpemUoCi0gICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKLSAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAotICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAotICAgICAgICAgICAgUENNXzgsCi0gICAgICAgICAgICAxMDAwMDAgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyAqLywKLSAgICAgICAgICAgIDEgLyogY291bnQgKi8sCi0gICAgICAgICAgICAxMDAzNTIgLyogZXhwZWN0ZWQgb3V0cHV0IHNpemUgPSA5OCAqIDEwMjQgYnl0ZXMvZnJhbWUgKi8pOwotICAgIHRlc3RQdXNoU2FtZVNpemUoCi0gICAgICAgICAgICAxMDI0IC8qIGZyYW1lIHNpemUgaW4gc2FtcGxlcyAqLywKLSAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAotICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAotICAgICAgICAgICAgUENNXzE2LAotICAgICAgICAgICAgMTAwMDAwIC8qIGlucHV0IGZyYW1lIHNpemUgaW4gYnl0ZXMgKi8sCi0gICAgICAgICAgICAxIC8qIGNvdW50ICovLAotICAgICAgICAgICAgMTAwMzUyIC8qIGV4cGVjdGVkIG91dHB1dCBzaXplID0gNDkgKiAyMDQ4IGJ5dGVzL2ZyYW1lICovKTsKLSAgICB0ZXN0UHVzaFNhbWVTaXplKAotICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCi0gICAgICAgICAgICA0ODAwMCAvKiBzYW1wbGUgcmF0ZSAqLywKLSAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKLSAgICAgICAgICAgIFBDTV9GTE9BVCwKLSAgICAgICAgICAgIDEwMDAwMCAvKiBpbnB1dCBmcmFtZSBzaXplIGluIGJ5dGVzICovLAotICAgICAgICAgICAgMSAvKiBjb3VudCAqLywKLSAgICAgICAgICAgIDEwMjQwMCAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDI1ICogNDA5NiBieXRlcy9mcmFtZSAqLyk7CisgICAgZm9yIChib29sIHNlcGFyYXRlRW9zIDoge2ZhbHNlLCB0cnVlfSkgeworICAgICAgICB0ZXN0UHVzaFNhbWVTaXplKAorICAgICAgICAgICAgICAgIDEwMjQgLyogZnJhbWUgc2l6ZSBpbiBzYW1wbGVzICovLAorICAgICAgICAgICAgICAgIDQ4MDAwIC8qIHNhbXBsZSByYXRlICovLAorICAgICAgICAgICAgICAgIDEgLyogY2hhbm5lbCBjb3VudCAqLywKKyAgICAgICAgICAgICAgICBQQ01fOCwKKyAgICAgICAgICAgICAgICAxMDAwMDAgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyAqLywKKyAgICAgICAgICAgICAgICAxIC8qIGNvdW50ICovLAorICAgICAgICAgICAgICAgIDEwMDM1MiAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDk4ICogMTAyNCBieXRlcy9mcmFtZSAqLywKKyAgICAgICAgICAgICAgICBzZXBhcmF0ZUVvcyk7CisgICAgICAgIHRlc3RQdXNoU2FtZVNpemUoCisgICAgICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCisgICAgICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCisgICAgICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAorICAgICAgICAgICAgICAgIFBDTV8xNiwKKyAgICAgICAgICAgICAgICAxMDAwMDAgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyAqLywKKyAgICAgICAgICAgICAgICAxIC8qIGNvdW50ICovLAorICAgICAgICAgICAgICAgIDEwMDM1MiAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDQ5ICogMjA0OCBieXRlcy9mcmFtZSAqLywKKyAgICAgICAgICAgICAgICBzZXBhcmF0ZUVvcyk7CisgICAgICAgIHRlc3RQdXNoU2FtZVNpemUoCisgICAgICAgICAgICAgICAgMTAyNCAvKiBmcmFtZSBzaXplIGluIHNhbXBsZXMgKi8sCisgICAgICAgICAgICAgICAgNDgwMDAgLyogc2FtcGxlIHJhdGUgKi8sCisgICAgICAgICAgICAgICAgMSAvKiBjaGFubmVsIGNvdW50ICovLAorICAgICAgICAgICAgICAgIFBDTV9GTE9BVCwKKyAgICAgICAgICAgICAgICAxMDAwMDAgLyogaW5wdXQgZnJhbWUgc2l6ZSBpbiBieXRlcyAqLywKKyAgICAgICAgICAgICAgICAxIC8qIGNvdW50ICovLAorICAgICAgICAgICAgICAgIDEwMjQwMCAvKiBleHBlY3RlZCBvdXRwdXQgc2l6ZSA9IDI1ICogNDA5NiBieXRlcy9mcmFtZSAqLywKKyAgICAgICAgICAgICAgICBzZXBhcmF0ZUVvcyk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdXRpbHMvQ29kZWMyQnVmZmVyVXRpbHMuY3BwIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL3V0aWxzL0NvZGVjMkJ1ZmZlclV0aWxzLmNwcAppbmRleCA1Zjg3YzY2Li4yMjEzMDAxIDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdXRpbHMvQ29kZWMyQnVmZmVyVXRpbHMuY3BwCisrKyBiL21lZGlhL2NvZGVjMi9zZnBsdWdpbi91dGlscy9Db2RlYzJCdWZmZXJVdGlscy5jcHAKQEAgLTExOCw2ICsxMTgsMjIgQEAKIAogfSAgLy8gbmFtZXNwYWNlCiAKK2Jvb2wgSXNGb3JtYXRSMTBHMTBCMTBBMlN1cHBvcnRlZEZvckxlZ2FjeVJlbmRlcmluZygpIHsKKyAgICBjb25zdCBBSGFyZHdhcmVCdWZmZXJfRGVzYyBkZXNjID0geworICAgICAgICAud2lkdGggPSAzMjAsCisgICAgICAgIC5oZWlnaHQgPSAyNDAsCisgICAgICAgIC5mb3JtYXQgPSBBSEFSRFdBUkVCVUZGRVJfRk9STUFUX1IxMEcxMEIxMEEyX1VOT1JNLAorICAgICAgICAubGF5ZXJzID0gMSwKKyAgICAgICAgLnVzYWdlID0gQUhBUkRXQVJFQlVGRkVSX1VTQUdFX0NQVV9SRUFEX1JBUkVMWSB8IEFIQVJEV0FSRUJVRkZFUl9VU0FHRV9DUFVfV1JJVEVfT0ZURU4gfAorICAgICAgICAgICAgICAgICBBSEFSRFdBUkVCVUZGRVJfVVNBR0VfR1BVX1NBTVBMRURfSU1BR0UsCisgICAgICAgIC5zdHJpZGUgPSAwLAorICAgICAgICAucmZ1MCA9IDAsCisgICAgICAgIC5yZnUxID0gMCwKKyAgICB9OworCisgICAgcmV0dXJuIEFIYXJkd2FyZUJ1ZmZlcl9pc1N1cHBvcnRlZCgmZGVzYyk7Cit9CisKIHN0YXR1c190IEltYWdlQ29weSh1aW50OF90ICppbWdCYXNlLCBjb25zdCBNZWRpYUltYWdlMiAqaW1nLCBjb25zdCBDMkdyYXBoaWNWaWV3ICZ2aWV3KSB7CiAgICAgaWYgKHZpZXcuY3JvcCgpLndpZHRoICE9IGltZy0+bVdpZHRoIHx8IHZpZXcuY3JvcCgpLmhlaWdodCAhPSBpbWctPm1IZWlnaHQpIHsKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi91dGlscy9Db2RlYzJCdWZmZXJVdGlscy5oIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL3V0aWxzL0NvZGVjMkJ1ZmZlclV0aWxzLmgKaW5kZXggOWZhNjQyZC4uYzQ2NTFhNCAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWMyL3NmcGx1Z2luL3V0aWxzL0NvZGVjMkJ1ZmZlclV0aWxzLmgKKysrIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL3V0aWxzL0NvZGVjMkJ1ZmZlclV0aWxzLmgKQEAgLTI3LDYgKzI3LDExIEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKIC8qKgorICogQ2hlY2sgaWYgUjEwRzEwQjEwQTIgaXMgc3VwcG9ydGVkIGluIGxlZ2FjeSByZW5kZXJpbmcgcGF0aCB0aGF0IGludm9sdmVzIEdQVQorICovCitib29sIElzRm9ybWF0UjEwRzEwQjEwQTJTdXBwb3J0ZWRGb3JMZWdhY3lSZW5kZXJpbmcoKTsKKworLyoqCiAgKiBDb252ZXJ0cyBhbiBSR0IgdmlldyB0byBwbGFuYXIgWVVWIDQyMCBtZWRpYSBpbWFnZS4KICAqCiAgKiBccGFyYW0gZHN0WSAgICAgICBwb2ludGVyIHRvIG1lZGlhIGltYWdlIGJ1ZmZlcgpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3NmcGx1Z2luL3V0aWxzL0NvZGVjMk1hcHBlci5jcHAgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdXRpbHMvQ29kZWMyTWFwcGVyLmNwcAppbmRleCA0ZDkzOWZhLi5mNTU3ODMwIDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdXRpbHMvQ29kZWMyTWFwcGVyLmNwcAorKysgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdXRpbHMvQ29kZWMyTWFwcGVyLmNwcApAQCAtMjU1LDYgKzI1NSw4IEBACiAgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9IRVZDX01BSU5fU1RJTEwsIEhFVkNQcm9maWxlTWFpblN0aWxsIH0sCiAgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9IRVZDX01BSU5fSU5UUkEsIEhFVkNQcm9maWxlTWFpbiB9LAogICAgIHsgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NQUlOXzEwX0lOVFJBLCBIRVZDUHJvZmlsZU1haW4xMCB9LAorICAgIHsgQzJDb25maWc6OlBST0ZJTEVfSEVWQ19NQUlOXzEwLCBIRVZDUHJvZmlsZU1haW4xMEhEUjEwIH0sCisgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9IRVZDX01BSU5fMTAsIEhFVkNQcm9maWxlTWFpbjEwSERSMTBQbHVzIH0sCiB9OwogCiBBTG9va3VwPEMyQ29uZmlnOjpwcm9maWxlX3QsIGludDMyX3Q+IHNIZXZjSGRyUHJvZmlsZXMgPSB7CkBAIC0zODEsMTUgKzM4MywxNyBAQAogICAgIHsgQzJDb25maWc6OkxFVkVMX0FWMV83XzMsICBBVjFMZXZlbDczIH0sCiB9OwogCi0KIEFMb29rdXA8QzJDb25maWc6OnByb2ZpbGVfdCwgaW50MzJfdD4gc0F2MVByb2ZpbGVzID0gewotICAgIC8vIFRPRE86IHdpbGwgbmVlZCB0byBkaXNhbWJpZ3VhdGUgYmV0d2VlbiBNYWluOCBhbmQgTWFpbjEwCiAgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9BVjFfMCwgQVYxUHJvZmlsZU1haW44IH0sCiAgICAgeyBDMkNvbmZpZzo6UFJPRklMRV9BVjFfMCwgQVYxUHJvZmlsZU1haW4xMCB9LAogICAgIHsgQzJDb25maWc6OlBST0ZJTEVfQVYxXzAsIEFWMVByb2ZpbGVNYWluMTBIRFIxMCB9LAogICAgIHsgQzJDb25maWc6OlBST0ZJTEVfQVYxXzAsIEFWMVByb2ZpbGVNYWluMTBIRFIxMFBsdXMgfSwKIH07CiAKK0FMb29rdXA8QzJDb25maWc6OnByb2ZpbGVfdCwgaW50MzJfdD4gc0F2MVRlbmJpdFByb2ZpbGVzID0geworICAgIHsgQzJDb25maWc6OlBST0ZJTEVfQVYxXzAsIEFWMVByb2ZpbGVNYWluMTAgfSwKK307CisKIEFMb29rdXA8QzJDb25maWc6OnByb2ZpbGVfdCwgaW50MzJfdD4gc0F2MUhkclByb2ZpbGVzID0gewogICAgIHsgQzJDb25maWc6OlBST0ZJTEVfQVYxXzAsIEFWMVByb2ZpbGVNYWluMTBIRFIxMCB9LAogfTsKQEAgLTYwMyw5ICs2MDcsOSBAQAogfTsKIAogc3RydWN0IEF2MVByb2ZpbGVMZXZlbE1hcHBlciA6IFByb2ZpbGVMZXZlbE1hcHBlckhlbHBlciB7Ci0gICAgQXYxUHJvZmlsZUxldmVsTWFwcGVyKGJvb2wgaXNIZHIgPSBmYWxzZSwgYm9vbCBpc0hkcjEwUGx1cyA9IGZhbHNlKSA6CisgICAgQXYxUHJvZmlsZUxldmVsTWFwcGVyKGJvb2wgaXNIZHIgPSBmYWxzZSwgYm9vbCBpc0hkcjEwUGx1cyA9IGZhbHNlLCBpbnQzMl90IGJpdERlcHRoID0gOCkgOgogICAgICAgICBQcm9maWxlTGV2ZWxNYXBwZXJIZWxwZXIoKSwKLSAgICAgICAgbUlzSGRyKGlzSGRyKSwgbUlzSGRyMTBQbHVzKGlzSGRyMTBQbHVzKSB7fQorICAgICAgICBtSXNIZHIoaXNIZHIpLCBtSXNIZHIxMFBsdXMoaXNIZHIxMFBsdXMpLCBtQml0RGVwdGgoYml0RGVwdGgpIHt9CiAKICAgICB2aXJ0dWFsIGJvb2wgc2ltcGxlTWFwKEMyQ29uZmlnOjpsZXZlbF90IGZyb20sIGludDMyX3QgKnRvKSB7CiAgICAgICAgIHJldHVybiBzQXYxTGV2ZWxzLm1hcChmcm9tLCB0byk7CkBAIC02MTQsMTkgKzYxOCwyMiBAQAogICAgICAgICByZXR1cm4gc0F2MUxldmVscy5tYXAoZnJvbSwgdG8pOwogICAgIH0KICAgICB2aXJ0dWFsIGJvb2wgc2ltcGxlTWFwKEMyQ29uZmlnOjpwcm9maWxlX3QgZnJvbSwgaW50MzJfdCAqdG8pIHsKLSAgICAgICAgcmV0dXJuIG1Jc0hkcjEwUGx1cyA/IHNBdjFIZHIxMFBsdXNQcm9maWxlcy5tYXAoZnJvbSwgdG8pIDoKLSAgICAgICAgICAgICAgICAgICAgIG1Jc0hkciA/IHNBdjFIZHJQcm9maWxlcy5tYXAoZnJvbSwgdG8pIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNBdjFQcm9maWxlcy5tYXAoZnJvbSwgdG8pOworICAgICAgICByZXR1cm4gKG1CaXREZXB0aCA9PSAxMCkgPyBzQXYxVGVuYml0UHJvZmlsZXMubWFwKGZyb20sIHRvKSA6CisgICAgICAgICAgICAgICAgICAgIG1Jc0hkcjEwUGx1cyA/IHNBdjFIZHIxMFBsdXNQcm9maWxlcy5tYXAoZnJvbSwgdG8pIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbUlzSGRyID8gc0F2MUhkclByb2ZpbGVzLm1hcChmcm9tLCB0bykgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzQXYxUHJvZmlsZXMubWFwKGZyb20sIHRvKTsKICAgICB9CiAgICAgdmlydHVhbCBib29sIHNpbXBsZU1hcChpbnQzMl90IGZyb20sIEMyQ29uZmlnOjpwcm9maWxlX3QgKnRvKSB7Ci0gICAgICAgIHJldHVybiBtSXNIZHIxMFBsdXMgPyBzQXYxSGRyMTBQbHVzUHJvZmlsZXMubWFwKGZyb20sIHRvKSA6Ci0gICAgICAgICAgICAgICAgICAgICBtSXNIZHIgPyBzQXYxSGRyUHJvZmlsZXMubWFwKGZyb20sIHRvKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzQXYxUHJvZmlsZXMubWFwKGZyb20sIHRvKTsKKyAgICAgICAgcmV0dXJuIChtQml0RGVwdGggPT0gMTApID8gc0F2MVRlbmJpdFByb2ZpbGVzLm1hcChmcm9tLCB0bykgOgorICAgICAgICAgICAgICAgICAgICBtSXNIZHIxMFBsdXMgPyBzQXYxSGRyMTBQbHVzUHJvZmlsZXMubWFwKGZyb20sIHRvKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1Jc0hkciA/IHNBdjFIZHJQcm9maWxlcy5tYXAoZnJvbSwgdG8pIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc0F2MVByb2ZpbGVzLm1hcChmcm9tLCB0byk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIGJvb2wgbUlzSGRyOwogICAgIGJvb2wgbUlzSGRyMTBQbHVzOworICAgIGludDMyX3QgbUJpdERlcHRoOwogfTsKIAogfSAvLyBuYW1lc3BhY2UKQEAgLTY3NCw2ICs2ODEsMTggQEAKIH0KIAogLy8gc3RhdGljCitzdGQ6OnNoYXJlZF9wdHI8QzJNYXBwZXI6OlByb2ZpbGVMZXZlbE1hcHBlcj4KK0MyTWFwcGVyOjpHZXRCaXREZXB0aFByb2ZpbGVMZXZlbE1hcHBlcihzdGQ6OnN0cmluZyBtZWRpYVR5cGUsIGludDMyX3QgYml0RGVwdGgpIHsKKyAgICBzdGQ6OnRyYW5zZm9ybShtZWRpYVR5cGUuYmVnaW4oKSwgbWVkaWFUeXBlLmVuZCgpLCBtZWRpYVR5cGUuYmVnaW4oKSwgOjp0b2xvd2VyKTsKKyAgICBpZiAoYml0RGVwdGggPT0gOCkgeworICAgICAgICByZXR1cm4gR2V0UHJvZmlsZUxldmVsTWFwcGVyKG1lZGlhVHlwZSk7CisgICAgfSBlbHNlIGlmIChtZWRpYVR5cGUgPT0gTUlNRVRZUEVfVklERU9fQVYxICYmIGJpdERlcHRoID09IDEwKSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vfc2hhcmVkPEF2MVByb2ZpbGVMZXZlbE1hcHBlcj4oZmFsc2UsIGZhbHNlLCBiaXREZXB0aCk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCisvLyBzdGF0aWMKIGJvb2wgQzJNYXBwZXI6Om1hcChDMkNvbmZpZzo6Yml0cmF0ZV9tb2RlX3QgZnJvbSwgaW50MzJfdCAqdG8pIHsKICAgICByZXR1cm4gc0JpdHJhdGVNb2Rlcy5tYXAoZnJvbSwgdG8pOwogfQpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWMyL3NmcGx1Z2luL3V0aWxzL0NvZGVjMk1hcHBlci5oIGIvbWVkaWEvY29kZWMyL3NmcGx1Z2luL3V0aWxzL0NvZGVjMk1hcHBlci5oCmluZGV4IDc5N2M4YTguLjMzZDMwNWUgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjMi9zZnBsdWdpbi91dGlscy9Db2RlYzJNYXBwZXIuaAorKysgYi9tZWRpYS9jb2RlYzIvc2ZwbHVnaW4vdXRpbHMvQ29kZWMyTWFwcGVyLmgKQEAgLTQzLDYgKzQzLDkgQEAKICAgICAgICAgc3RhdGljIHN0ZDo6c2hhcmVkX3B0cjxQcm9maWxlTGV2ZWxNYXBwZXI+CiAgICAgICAgIEdldEhkclByb2ZpbGVMZXZlbE1hcHBlcihzdGQ6OnN0cmluZyBtZWRpYVR5cGUsIGJvb2wgaXNIZHIxMFBsdXMgPSBmYWxzZSk7CiAKKyAgICAgICAgc3RhdGljIHN0ZDo6c2hhcmVkX3B0cjxQcm9maWxlTGV2ZWxNYXBwZXI+CisgICAgICAgIEdldEJpdERlcHRoUHJvZmlsZUxldmVsTWFwcGVyKHN0ZDo6c3RyaW5nIG1lZGlhVHlwZSwgaW50MzJfdCBiaXREZXB0aCA9IDgpOworCiAgICAgICAgIC8vIGNvbnZlcnQgYmV0d2VlbiBiaXRyYXRlcwogICAgICAgICBzdGF0aWMgYm9vbCBtYXAoQzJDb25maWc6OmJpdHJhdGVfbW9kZV90LCBpbnQzMl90Kik7CiAgICAgICAgIHN0YXRpYyBib29sIG1hcChpbnQzMl90LCBDMkNvbmZpZzo6Yml0cmF0ZV9tb2RlX3QqKTsKZGlmZiAtLWdpdCBhL21lZGlhL2NvZGVjMi92bmRrL3BsYXRmb3JtL0MyQnFCdWZmZXIuY3BwIGIvbWVkaWEvY29kZWMyL3ZuZGsvcGxhdGZvcm0vQzJCcUJ1ZmZlci5jcHAKaW5kZXggMTY5ZGUwYy4uMDE5OTVmZCAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWMyL3ZuZGsvcGxhdGZvcm0vQzJCcUJ1ZmZlci5jcHAKKysrIGIvbWVkaWEvY29kZWMyL3ZuZGsvcGxhdGZvcm0vQzJCcUJ1ZmZlci5jcHAKQEAgLTE2LDYgKzE2LDcgQEAKIAogLy8jZGVmaW5lIExPR19OREVCVUcgMAogI2RlZmluZSBMT0dfVEFHICJDMkJxQnVmZmVyIgorI2luY2x1ZGUgPGFuZHJvaWQvaGFyZHdhcmVfYnVmZmVyLmg+CiAjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CiAKICNpbmNsdWRlIDx1aS9CdWZmZXJRdWV1ZURlZnMuaD4KQEAgLTE3MSw2ICsxNzIsOTEgQEAKICAgICByZXR1cm4gc3RhbXA7CiB9CiAKKy8vIERvIG5vdCByZWx5IG9uIEFIYXJkd2FyZUJ1ZmZlciBtb2R1bGUgZm9yIEdyYXBoaWNCdWZmZXIgaGFuZGxpbmcgc2luY2UgQUhhcmR3YXJlQnVmZmVyCisvLyBtb2R1bGUgaXMgbGlua2VkIHRvIGZyYW1ld29yayB3aGljaCBjb3VsZCBoYXZlIGEgZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIG9mIEdyYXBoaWNCdWZmZXIKKy8vIHRoYW4gbWFpbmxpbmUvdm5kayBpbXBsZW1lbnRhdGlvbi4oU2VlIGIvMjAzMzQ3NDk0LikKKy8vCisvLyBiMmgvaDJiIGJldHdlZW4gSGFyZHdhcmVCdWZmZXIgYW5kIEdyYXBoaWNCdWZmZXIgY2Fubm90IGJlIHVzZWQuIChiMmgvaDJiIGRlcGVuZCBvbgorLy8gQUhhcmR3YXJlQnVmZmVyIG1vZHVsZSBmb3IgdGhlIGNvbnZlcnNpb24gYmV0d2VlbiBIYXJkd2FyZUJ1ZmZlciBhbmQgR3JhcGhpY0J1ZmZlci4pCisvLyBoZ2JwXyBwcmVmaXhlZCBtZXRob2RzIGFyZSBhZGRlZCB0byBiZSB1c2VkIGluc3RlYWQgb2YgYjJoL2gyYi4KKy8vCisvLyBUT0RPOiBSZW1vdmUgZGVwZW5kZW5jeSB3aXRoIGV4aXN0aW5nIEFId0IgbW9kdWxlLiBBbHNvIGNsZWFuIHVwIGNvbnZlcnNpb25zLihjb252ZXJzaW9ucyBoZXJlCisvLyBhbmQgaDJiL2IyaCBjb3ZlcnNpb25zKQorY29uc3QgR3JhcGhpY0J1ZmZlciogaGdicF9BSEJ1ZmZlcl90b19HcmFwaGljQnVmZmVyKGNvbnN0IEFIYXJkd2FyZUJ1ZmZlciogYnVmZmVyKSB7CisgICAgcmV0dXJuIEdyYXBoaWNCdWZmZXI6OmZyb21BSGFyZHdhcmVCdWZmZXIoYnVmZmVyKTsKK30KKworaW50IGhnYnBfY3JlYXRlRnJvbUhhbmRsZShjb25zdCBBSGFyZHdhcmVCdWZmZXJfRGVzYyogZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYXRpdmVfaGFuZGxlX3QqIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcDxHcmFwaGljQnVmZmVyPiAqb3V0QnVmZmVyKSB7CisKKyAgICBpZiAoIWRlc2MgfHwgIWhhbmRsZSB8fCAhb3V0QnVmZmVyKSByZXR1cm4gOjphbmRyb2lkOjpCQURfVkFMVUU7CisgICAgaWYgKGRlc2MtPnJmdTAgIT0gMCB8fCBkZXNjLT5yZnUxICE9IDApIHJldHVybiA6OmFuZHJvaWQ6OkJBRF9WQUxVRTsKKyAgICBpZiAoZGVzYy0+Zm9ybWF0ID09IEFIQVJEV0FSRUJVRkZFUl9GT1JNQVRfQkxPQiAmJiBkZXNjLT5oZWlnaHQgIT0gMSkKKyAgICAgICAgcmV0dXJuIDo6YW5kcm9pZDo6QkFEX1ZBTFVFOworCisgICAgY29uc3QgaW50IGZvcm1hdCA9IHVpbnQzMl90KGRlc2MtPmZvcm1hdCk7CisgICAgY29uc3QgdWludDY0X3QgdXNhZ2UgPSB1aW50NjRfdChkZXNjLT51c2FnZSk7CisgICAgc3A8R3JhcGhpY0J1ZmZlcj4gZ2J1ZmZlcihuZXcgR3JhcGhpY0J1ZmZlcihoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljQnVmZmVyOjpIYW5kbGVXcmFwTWV0aG9kOjpDTE9ORV9IQU5ETEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjLT53aWR0aCwgZGVzYy0+aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBkZXNjLT5sYXllcnMsIHVzYWdlLCBkZXNjLT5zdHJpZGUpKTsKKyAgICBzdGF0dXNfdCBlcnIgPSBnYnVmZmVyLT5pbml0Q2hlY2soKTsKKyAgICBpZiAoZXJyICE9IDAgfHwgZ2J1ZmZlci0+aGFuZGxlID09IDApIHJldHVybiBlcnI7CisKKyAgICAqb3V0QnVmZmVyID0gZ2J1ZmZlcjsKKworICAgIHJldHVybiA6OmFuZHJvaWQ6Ok5PX0VSUk9SOworfQorCit2b2lkIGhnYnBfZGVzY3JpYmUoY29uc3QgQUhhcmR3YXJlQnVmZmVyKiBidWZmZXIsCisgICAgICAgIEFIYXJkd2FyZUJ1ZmZlcl9EZXNjKiBvdXREZXNjKSB7CisgICAgaWYgKCFidWZmZXIgfHwgIW91dERlc2MpIHJldHVybjsKKworICAgIGNvbnN0IEdyYXBoaWNCdWZmZXIqIGdidWZmZXIgPSBoZ2JwX0FIQnVmZmVyX3RvX0dyYXBoaWNCdWZmZXIoYnVmZmVyKTsKKworICAgIG91dERlc2MtPndpZHRoID0gZ2J1ZmZlci0+Z2V0V2lkdGgoKTsKKyAgICBvdXREZXNjLT5oZWlnaHQgPSBnYnVmZmVyLT5nZXRIZWlnaHQoKTsKKyAgICBvdXREZXNjLT5sYXllcnMgPSBnYnVmZmVyLT5nZXRMYXllckNvdW50KCk7CisgICAgb3V0RGVzYy0+Zm9ybWF0ID0gdWludDMyX3QoZ2J1ZmZlci0+Z2V0UGl4ZWxGb3JtYXQoKSk7CisgICAgb3V0RGVzYy0+dXNhZ2UgPSB1aW50NjRfdChnYnVmZmVyLT5nZXRVc2FnZSgpKTsKKyAgICBvdXREZXNjLT5zdHJpZGUgPSBnYnVmZmVyLT5nZXRTdHJpZGUoKTsKKyAgICBvdXREZXNjLT5yZnUwID0gMDsKKyAgICBvdXREZXNjLT5yZnUxID0gMDsKK30KKworCitib29sIGhnYnBfaDJiKEhCdWZmZXIgY29uc3QmIGZyb20sIHNwPEdyYXBoaWNCdWZmZXI+KiB0bykgeworICAgIEFIYXJkd2FyZUJ1ZmZlcl9EZXNjIGNvbnN0KiBkZXNjID0KKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QUhhcmR3YXJlQnVmZmVyX0Rlc2MgY29uc3QqPigKKyAgICAgICAgICAgIGZyb20uZGVzY3JpcHRpb24uZGF0YSgpKTsKKyAgICBuYXRpdmVfaGFuZGxlX3QgY29uc3QqIGhhbmRsZSA9IGZyb20ubmF0aXZlSGFuZGxlOworICAgIGlmIChoZ2JwX2NyZWF0ZUZyb21IYW5kbGUoZGVzYywgaGFuZGxlLCB0bykgIT0gOjphbmRyb2lkOjpPSykgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIGhnYnBfYjJoKHNwPEdyYXBoaWNCdWZmZXI+IGNvbnN0JiBmcm9tLCBIQnVmZmVyKiB0bywKKyAgICAgICAgIHVpbnQzMl90KiB0b0dlbmVyYXRpb25OdW1iZXIpIHsKKyAgICBpZiAoIWZyb20pIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBBSGFyZHdhcmVCdWZmZXIqIGh3QnVmZmVyID0gZnJvbS0+dG9BSGFyZHdhcmVCdWZmZXIoKTsKKyAgICB0by0+bmF0aXZlSGFuZGxlLnNldFRvKAorICAgICAgICAgIGNvbnN0X2Nhc3Q8bmF0aXZlX2hhbmRsZV90Kj4oZnJvbS0+aGFuZGxlKSwKKyAgICAgICAgICBmYWxzZSk7CisgICAgaGdicF9kZXNjcmliZSgKKyAgICAgICAgICAgIGh3QnVmZmVyLAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxBSGFyZHdhcmVCdWZmZXJfRGVzYyo+KHRvLT5kZXNjcmlwdGlvbi5kYXRhKCkpKTsKKyAgICBpZiAodG9HZW5lcmF0aW9uTnVtYmVyKSB7CisgICAgICAgICp0b0dlbmVyYXRpb25OdW1iZXIgPSBmcm9tLT5nZXRHZW5lcmF0aW9uTnVtYmVyKCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCisvLyBFbmQgb2YgaGdicCBtZXRob2RzIGZvciBHcmFwaGljQnVmZmVyIGNyZWF0aW9uLgorCiBib29sIGdldEdlbmVyYXRpb25OdW1iZXJBbmRVc2FnZShjb25zdCBzcDxIR3JhcGhpY0J1ZmZlclByb2R1Y2VyPiAmcHJvZHVjZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqZ2VuZXJhdGlvbiwgdWludDY0X3QgKnVzYWdlKSB7CiAgICAgc3RhdHVzX3Qgc3RhdHVze307CkBAIC0yMTEsNyArMjk3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgSEJ1ZmZlciBjb25zdCYgaEJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZ2VuZXJhdGlvbk51bWJlcil7CiAgICAgICAgICAgICAgICAgaWYgKGgyYihoU3RhdHVzLCAmc3RhdHVzKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgaDJiKGhCdWZmZXIsICZzbG90QnVmZmVyKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgaGdicF9oMmIoaEJ1ZmZlciwgJnNsb3RCdWZmZXIpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICBzbG90QnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICpnZW5lcmF0aW9uID0gZ2VuZXJhdGlvbk51bWJlcjsKICAgICAgICAgICAgICAgICAgICAgKnVzYWdlID0gc2xvdEJ1ZmZlci0+Z2V0VXNhZ2UoKTsKQEAgLTQwMiw3ICs0ODgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhCdWZmZXIgY29uc3QmIGhCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZ2VuZXJhdGlvbk51bWJlcil7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaDJiKGhTdGF0dXMsICZzdGF0dXMpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgyYihoQnVmZmVyLCAmc2xvdEJ1ZmZlcikgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGdicF9oMmIoaEJ1ZmZlciwgJnNsb3RCdWZmZXIpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90QnVmZmVyLT5zZXRHZW5lcmF0aW9uTnVtYmVyKGdlbmVyYXRpb25OdW1iZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dEdlbmVyYXRpb24gPSBnZW5lcmF0aW9uTnVtYmVyOwpAQCAtODA0LDcgKzg5MCw3IEBACiAKICAgICBIQnVmZmVyIGhCdWZmZXJ7fTsKICAgICB1aW50MzJfdCBoR2VuZXJhdGlvbk51bWJlcnt9OwotICAgIGlmICghYjJoKGdyYXBoaWNCdWZmZXIsICZoQnVmZmVyLCAmaEdlbmVyYXRpb25OdW1iZXIpKSB7CisgICAgaWYgKCFoZ2JwX2IyaChncmFwaGljQnVmZmVyLCAmaEJ1ZmZlciwgJmhHZW5lcmF0aW9uTnVtYmVyKSkgewogICAgICAgICBBTE9HRCgiSSB0byBPIGNvbnZlcnNpb24gZmFpbGVkIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlY3MvbTR2X2gyNjMvZW5jL3NyYy9mYXN0aWRjdC5jcHAgYi9tZWRpYS9jb2RlY3MvbTR2X2gyNjMvZW5jL3NyYy9mYXN0aWRjdC5jcHAKaW5kZXggNjg4ZWZmYy4uZWMxYjI4ZiAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWNzL200dl9oMjYzL2VuYy9zcmMvZmFzdGlkY3QuY3BwCisrKyBiL21lZGlhL2NvZGVjcy9tNHZfaDI2My9lbmMvc3JjL2Zhc3RpZGN0LmNwcApAQCAtNzYsNiArNzYsOCBAQAogICAgIHJldHVybiA7CiB9CiAKKy8qIElnbm9yaW5nIG92ZXJmbG93cyBhcyBpZGN0IGZ1bmN0aW9uIGV4cGVjdHMgYW5kIHVzZXMgb3ZlcmZsb3dzICovCitfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZSgic2lnbmVkLWludGVnZXItb3ZlcmZsb3ciKSkpCiB2b2lkIGlkY3RfY29sMihTaG9ydCAqYmxrKQogewogICAgIGludDMyIHgwLCB4MSwgeDMsIHg1LCB4NzsvLywgeDg7CkBAIC0xMDIsNiArMTA0LDggQEAKICAgICByZXR1cm4gOwogfQogCisvKiBJZ25vcmluZyBvdmVyZmxvd3MgYXMgaWRjdCBmdW5jdGlvbiBleHBlY3RzIGFuZCB1c2VzIG92ZXJmbG93cyAqLworX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikpKQogdm9pZCBpZGN0X2NvbDMoU2hvcnQgKmJsaykKIHsKICAgICBpbnQzMiB4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHg4OwpAQCAtMTM3LDYgKzE0MSw4IEBACiAgICAgcmV0dXJuIDsKIH0KIAorLyogSWdub3Jpbmcgb3ZlcmZsb3dzIGFzIGlkY3QgZnVuY3Rpb24gZXhwZWN0cyBhbmQgdXNlcyBvdmVyZmxvd3MgKi8KK19fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkKIHZvaWQgaWRjdF9jb2w0KFNob3J0ICpibGspCiB7CiAgICAgaW50MzIgeDAsIHgxLCB4MiwgeDMsIHg0LCB4NSwgeDYsIHg3LCB4ODsKQEAgLTE4MCw2ICsxODYsOCBAQAogfQogCiAjaWZuZGVmIFNNQUxMX0RDVAorLyogSWdub3Jpbmcgb3ZlcmZsb3dzIGFzIGlkY3QgZnVuY3Rpb24gZXhwZWN0cyBhbmQgdXNlcyBvdmVyZmxvd3MgKi8KK19fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkKIHZvaWQgaWRjdF9jb2wweDQwKFNob3J0ICpibGspCiB7CiAgICAgaW50MzIgeDEsIHgzLCB4NSwgeDc7Ly8sIHg4OwpAQCAtMjMwLDYgKzIzOCw4IEBACiAgICAgcmV0dXJuIDsKIH0KIAorLyogSWdub3Jpbmcgb3ZlcmZsb3dzIGFzIGlkY3QgZnVuY3Rpb24gZXhwZWN0cyBhbmQgdXNlcyBvdmVyZmxvd3MgKi8KK19fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkKIHZvaWQgaWRjdF9jb2wweDEwKFNob3J0ICpibGspCiB7CiAgICAgaW50MzIgeDEsIHgzLCB4NSwgIHg3OwpAQCAtMjU2LDYgKzI2Niw4IEBACiAKICNlbmRpZiAvKiBTTUFMTF9EQ1QgKi8KIAorLyogSWdub3Jpbmcgb3ZlcmZsb3dzIGFzIGlkY3QgZnVuY3Rpb24gZXhwZWN0cyBhbmQgdXNlcyBvdmVyZmxvd3MgKi8KK19fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkKIHZvaWQgaWRjdF9jb2woU2hvcnQgKmJsaykKIHsKICAgICBpbnQzMiB4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHg4OwpAQCAtMzY4LDYgKzM4MCw4IEBACiAgICAgcmV0dXJuOwogfQogCisvKiBJZ25vcmluZyBvdmVyZmxvd3MgYXMgaWRjdCBmdW5jdGlvbiBleHBlY3RzIGFuZCB1c2VzIG92ZXJmbG93cyAqLworX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikpKQogdm9pZCBpZGN0X3JvdzJJbnRlcihTaG9ydCAqYmxrLCBVQ2hhciAqcmVjLCBJbnQgbHgpCiB7CiAgICAgaW50MzIgeDAsIHgxLCB4MiwgeDQsIHg1OwpAQCAtNDI3LDYgKzQ0MSw4IEBACiAgICAgcmV0dXJuIDsKIH0KIAorLyogSWdub3Jpbmcgb3ZlcmZsb3dzIGFzIGlkY3QgZnVuY3Rpb24gZXhwZWN0cyBhbmQgdXNlcyBvdmVyZmxvd3MgKi8KK19fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkKIHZvaWQgaWRjdF9yb3czSW50ZXIoU2hvcnQgKmJsaywgVUNoYXIgKnJlYywgSW50IGx4KQogewogICAgIGludDMyIHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeDg7CkBAIC00OTcsNiArNTEzLDggQEAKICAgICByZXR1cm4gOwogfQogCisvKiBJZ25vcmluZyBvdmVyZmxvd3MgYXMgaWRjdCBmdW5jdGlvbiBleHBlY3RzIGFuZCB1c2VzIG92ZXJmbG93cyAqLworX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikpKQogdm9pZCBpZGN0X3JvdzRJbnRlcihTaG9ydCAqYmxrLCBVQ2hhciAqcmVjLCBJbnQgbHgpCiB7CiAgICAgaW50MzIgeDAsIHgxLCB4MiwgeDMsIHg0LCB4NSwgeDYsIHg3LCB4ODsKQEAgLTU3Myw2ICs1OTEsOCBAQAogfQogCiAjaWZuZGVmIFNNQUxMX0RDVAorLyogSWdub3Jpbmcgb3ZlcmZsb3dzIGFzIGlkY3QgZnVuY3Rpb24gZXhwZWN0cyBhbmQgdXNlcyBvdmVyZmxvd3MgKi8KK19fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkKIHZvaWQgaWRjdF9yb3cweDQwSW50ZXIoU2hvcnQgKmJsaywgVUNoYXIgKnJlYywgSW50IGx4KQogewogICAgIGludDMyIHgxLCB4MiwgeDQsIHg1OwpAQCAtNjg2LDYgKzcwNiw4IEBACiAgICAgcmV0dXJuIDsKIH0KIAorLyogSWdub3Jpbmcgb3ZlcmZsb3dzIGFzIGlkY3QgZnVuY3Rpb24gZXhwZWN0cyBhbmQgdXNlcyBvdmVyZmxvd3MgKi8KK19fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkKIHZvaWQgaWRjdF9yb3cweDEwSW50ZXIoU2hvcnQgKmJsaywgVUNoYXIgKnJlYywgSW50IGx4KQogewogICAgIGludDMyIHgxLCB4MywgeDUsIHg3OwpAQCAtNzQxLDYgKzc2Myw4IEBACiAKICNlbmRpZiAvKiBTTUFMTF9EQ1QgKi8KIAorLyogSWdub3Jpbmcgb3ZlcmZsb3dzIGFzIGlkY3QgZnVuY3Rpb24gZXhwZWN0cyBhbmQgdXNlcyBvdmVyZmxvd3MgKi8KK19fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkKIHZvaWQgaWRjdF9yb3dJbnRlcihTaG9ydCAqYmxrLCBVQ2hhciAqcmVjLCBJbnQgbHgpCiB7CiAgICAgaW50MzIgeDAsIHgxLCB4MiwgeDMsIHg0LCB4NSwgeDYsIHg3LCB4ODsKQEAgLTg2NCw2ICs4ODgsOCBAQAogICAgIHJldHVybjsKIH0KIAorLyogSWdub3Jpbmcgb3ZlcmZsb3dzIGFzIGlkY3QgZnVuY3Rpb24gZXhwZWN0cyBhbmQgdXNlcyBvdmVyZmxvd3MgKi8KK19fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkKIHZvaWQgaWRjdF9yb3cySW50cmEoU2hvcnQgKmJsaywgVUNoYXIgKnJlYywgSW50IGx4KQogewogICAgIGludDMyIHgwLCB4MSwgeDIsIHg0LCB4NTsKQEAgLTkxOSw2ICs5NDUsOCBAQAogICAgIHJldHVybiA7CiB9CiAKKy8qIElnbm9yaW5nIG92ZXJmbG93cyBhcyBpZGN0IGZ1bmN0aW9uIGV4cGVjdHMgYW5kIHVzZXMgb3ZlcmZsb3dzICovCitfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZSgic2lnbmVkLWludGVnZXItb3ZlcmZsb3ciKSkpCiB2b2lkIGlkY3Rfcm93M0ludHJhKFNob3J0ICpibGssIFVDaGFyICpyZWMsIEludCBseCkKIHsKICAgICBpbnQzMiB4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHg4OwpAQCAtOTg1LDYgKzEwMTMsOCBAQAogICAgIHJldHVybiA7CiB9CiAKKy8qIElnbm9yaW5nIG92ZXJmbG93cyBhcyBpZGN0IGZ1bmN0aW9uIGV4cGVjdHMgYW5kIHVzZXMgb3ZlcmZsb3dzICovCitfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZSgic2lnbmVkLWludGVnZXItb3ZlcmZsb3ciKSkpCiB2b2lkIGlkY3Rfcm93NEludHJhKFNob3J0ICpibGssIFVDaGFyICpyZWMsIEludCBseCkKIHsKICAgICBpbnQzMiB4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHg4OwpAQCAtMTA1OCw2ICsxMDg4LDggQEAKIH0KIAogI2lmbmRlZiBTTUFMTF9EQ1QKKy8qIElnbm9yaW5nIG92ZXJmbG93cyBhcyBpZGN0IGZ1bmN0aW9uIGV4cGVjdHMgYW5kIHVzZXMgb3ZlcmZsb3dzICovCitfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZSgic2lnbmVkLWludGVnZXItb3ZlcmZsb3ciKSkpCiB2b2lkIGlkY3Rfcm93MHg0MEludHJhKFNob3J0ICpibGssIFVDaGFyICpyZWMsIEludCBseCkKIHsKICAgICBpbnQzMiAgeDEsIHgyLCB4NCwgeDU7CkBAIC0xMTY2LDYgKzExOTgsOCBAQAogICAgIHJldHVybiA7CiB9CiAKKy8qIElnbm9yaW5nIG92ZXJmbG93cyBhcyBpZGN0IGZ1bmN0aW9uIGV4cGVjdHMgYW5kIHVzZXMgb3ZlcmZsb3dzICovCitfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZSgic2lnbmVkLWludGVnZXItb3ZlcmZsb3ciKSkpCiB2b2lkIGlkY3Rfcm93MHgxMEludHJhKFNob3J0ICpibGssIFVDaGFyICpyZWMsIEludCBseCkKIHsKICAgICBpbnQzMiB4MSwgeDMsIHg1LCB4NzsKQEAgLTEyMTgsNiArMTI1Miw4IEBACiB9CiAKICNlbmRpZiAvKiBTTUFMTF9EQ1QgKi8KKy8qIElnbm9yaW5nIG92ZXJmbG93cyBhcyBpZGN0IGZ1bmN0aW9uIGV4cGVjdHMgYW5kIHVzZXMgb3ZlcmZsb3dzICovCitfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZSgic2lnbmVkLWludGVnZXItb3ZlcmZsb3ciKSkpCiB2b2lkIGlkY3Rfcm93SW50cmEoU2hvcnQgKmJsaywgVUNoYXIgKnJlYywgSW50IGx4KQogewogICAgIGludDMyIHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeDg7CkBAIC0xMzY0LDYgKzE0MDAsOCBAQAogICAgIHJldHVybjsKIH0KIAorLyogSWdub3Jpbmcgb3ZlcmZsb3dzIGFzIGlkY3QgZnVuY3Rpb24gZXhwZWN0cyBhbmQgdXNlcyBvdmVyZmxvd3MgKi8KK19fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkKIHZvaWQgaWRjdF9yb3cyem12KFNob3J0ICpibGssIFVDaGFyICpyZWMsIFVDaGFyICpwcmVkLCBJbnQgbHgpCiB7CiAgICAgaW50MzIgeDAsIHgxLCB4MiwgeDQsIHg1OwpAQCAtMTQyNCw2ICsxNDYyLDggQEAKICAgICByZXR1cm4gOwogfQogCisvKiBJZ25vcmluZyBvdmVyZmxvd3MgYXMgaWRjdCBmdW5jdGlvbiBleHBlY3RzIGFuZCB1c2VzIG92ZXJmbG93cyAqLworX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikpKQogdm9pZCBpZGN0X3JvdzN6bXYoU2hvcnQgKmJsaywgVUNoYXIgKnJlYywgVUNoYXIgKnByZWQsIEludCBseCkKIHsKICAgICBpbnQzMiB4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHg4OwpAQCAtMTQ5NSw2ICsxNTM1LDggQEAKICAgICByZXR1cm4gOwogfQogCisvKiBJZ25vcmluZyBvdmVyZmxvd3MgYXMgaWRjdCBmdW5jdGlvbiBleHBlY3RzIGFuZCB1c2VzIG92ZXJmbG93cyAqLworX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikpKQogdm9pZCBpZGN0X3JvdzR6bXYoU2hvcnQgKmJsaywgVUNoYXIgKnJlYywgVUNoYXIgKnByZWQsIEludCBseCkKIHsKICAgICBpbnQzMiB4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHg4OwpAQCAtMTU3Miw2ICsxNjE0LDggQEAKIH0KIAogI2lmbmRlZiBTTUFMTF9EQ1QKKy8qIElnbm9yaW5nIG92ZXJmbG93cyBhcyBpZGN0IGZ1bmN0aW9uIGV4cGVjdHMgYW5kIHVzZXMgb3ZlcmZsb3dzICovCitfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZSgic2lnbmVkLWludGVnZXItb3ZlcmZsb3ciKSkpCiB2b2lkIGlkY3Rfcm93MHg0MHptdihTaG9ydCAqYmxrLCBVQ2hhciAqcmVjLCBVQ2hhciAqcHJlZCwgSW50IGx4KQogewogICAgIGludDMyIHgxLCB4MiwgeDQsIHg1OwpAQCAtMTY4Nyw2ICsxNzMxLDggQEAKICAgICByZXR1cm4gOwogfQogCisvKiBJZ25vcmluZyBvdmVyZmxvd3MgYXMgaWRjdCBmdW5jdGlvbiBleHBlY3RzIGFuZCB1c2VzIG92ZXJmbG93cyAqLworX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoInNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikpKQogdm9pZCBpZGN0X3JvdzB4MTB6bXYoU2hvcnQgKmJsaywgVUNoYXIgKnJlYywgVUNoYXIgKnByZWQsIEludCBseCkKIHsKICAgICBpbnQzMiB4MSwgeDMsIHg1LCB4NzsKQEAgLTE3NDMsNiArMTc4OSw4IEBACiAKICNlbmRpZiAvKiBTTUFMTF9EQ1QgKi8KIAorLyogSWdub3Jpbmcgb3ZlcmZsb3dzIGFzIGlkY3QgZnVuY3Rpb24gZXhwZWN0cyBhbmQgdXNlcyBvdmVyZmxvd3MgKi8KK19fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkKIHZvaWQgaWRjdF9yb3d6bXYoU2hvcnQgKmJsaywgVUNoYXIgKnJlYywgVUNoYXIgKnByZWQsIEludCBseCkKIHsKICAgICBpbnQzMiB4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHg4OwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWNzL200dl9oMjYzL2VuYy9zcmMvbXA0ZW5jX2FwaS5jcHAgYi9tZWRpYS9jb2RlY3MvbTR2X2gyNjMvZW5jL3NyYy9tcDRlbmNfYXBpLmNwcAppbmRleCAwMGIyYWI2Li5iMjk1MjU4IDEwMDY0NAotLS0gYS9tZWRpYS9jb2RlY3MvbTR2X2gyNjMvZW5jL3NyYy9tcDRlbmNfYXBpLmNwcAorKysgYi9tZWRpYS9jb2RlY3MvbTR2X2gyNjMvZW5jL3NyYy9tcDRlbmNfYXBpLmNwcApAQCAtNTAxLDEzICs1MDEsMTYgQEAKICAgICAvKiBjaGVjayBmcmFtZSByYXRlICovCiAgICAgZm9yIChpID0gMDsgaSA8IGVuY1BhcmFtcy0+bkxheWVyczsgaSsrKQogICAgIHsKKyAgICAgICAgaWYgKGVuY09wdGlvbi0+ZW5jRnJhbWVSYXRlW2ldIDw9IDAuIHx8IGVuY09wdGlvbi0+ZW5jRnJhbWVSYXRlW2ldID4gMTIwKQorICAgICAgICB7CisgICAgICAgICAgICBnb3RvIENMRUFOX1VQOworICAgICAgICB9CiAgICAgICAgIGVuY1BhcmFtcy0+TGF5ZXJGcmFtZVJhdGVbaV0gPSBlbmNPcHRpb24tPmVuY0ZyYW1lUmF0ZVtpXTsKICAgICB9CiAKICAgICBpZiAoZW5jUGFyYW1zLT5uTGF5ZXJzID4gMSkKICAgICB7Ci0gICAgICAgIGlmIChlbmNPcHRpb24tPmVuY0ZyYW1lUmF0ZVswXSA9PSBlbmNPcHRpb24tPmVuY0ZyYW1lUmF0ZVsxXSB8fAotICAgICAgICAgICAgICAgIGVuY09wdGlvbi0+ZW5jRnJhbWVSYXRlWzBdID09IDAuIHx8IGVuY09wdGlvbi0+ZW5jRnJhbWVSYXRlWzFdID09IDAuKSAvKiA3LzMxLzAzICovCisgICAgICAgIGlmIChlbmNPcHRpb24tPmVuY0ZyYW1lUmF0ZVswXSA9PSBlbmNPcHRpb24tPmVuY0ZyYW1lUmF0ZVsxXSkKICAgICAgICAgICAgIGdvdG8gQ0xFQU5fVVA7CiAgICAgfQogICAgIC8qIHNldCBtYXggZnJhbWUgcmF0ZSAqLwpkaWZmIC0tZ2l0IGEvbWVkaWEvY29kZWNzL200dl9oMjYzL2Z1enplci9tcGVnNF9oMjYzX2RlY19mdXp6ZXIuY3BwIGIvbWVkaWEvY29kZWNzL200dl9oMjYzL2Z1enplci9tcGVnNF9oMjYzX2RlY19mdXp6ZXIuY3BwCmluZGV4IDkxMmM4MjEuLjVlNjEzZDkgMTAwNjQ0Ci0tLSBhL21lZGlhL2NvZGVjcy9tNHZfaDI2My9mdXp6ZXIvbXBlZzRfaDI2M19kZWNfZnV6emVyLmNwcAorKysgYi9tZWRpYS9jb2RlY3MvbTR2X2gyNjMvZnV6emVyL21wZWc0X2gyNjNfZGVjX2Z1enplci5jcHAKQEAgLTUwLDcgKzUwLDcgQEAKIAogIHByaXZhdGU6CiAgIHRhZ3ZpZGVvRGVjQ29udHJvbHMgKm1EZWNIYW5kbGUgPSBudWxscHRyOwotICB1aW50OF90ICptT3V0cHV0QnVmZmVyW2tOdW1PdXRwdXRCdWZmZXJzXTsKKyAgdWludDhfdCAqbU91dHB1dEJ1ZmZlcltrTnVtT3V0cHV0QnVmZmVyc10gPSB7fTsKICAgYm9vbCBtSW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgYm9vbCBtRnJhbWVzQ29uZmlndXJlZCA9IGZhbHNlOwogI2lmZGVmIE1QRUc0CmRpZmYgLS1naXQgYS9tZWRpYS9jb2RlY3MvbXAzZGVjL3NyYy9wdm1wM19zdGVyZW9fcHJvYy5jcHAgYi9tZWRpYS9jb2RlY3MvbXAzZGVjL3NyYy9wdm1wM19zdGVyZW9fcHJvYy5jcHAKaW5kZXggNDMzOGM0My4uYzA0ZjdmMyAxMDA2NDQKLS0tIGEvbWVkaWEvY29kZWNzL21wM2RlYy9zcmMvcHZtcDNfc3RlcmVvX3Byb2MuY3BwCisrKyBiL21lZGlhL2NvZGVjcy9tcDNkZWMvc3JjL3B2bXAzX3N0ZXJlb19wcm9jLmNwcApAQCAtMjE5LDYgKzIxOSw5IEBACiA7IEZVTkNUSU9OIENPREUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisjaWYgX19oYXNfYXR0cmlidXRlKG5vX3Nhbml0aXplKQorX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoImludGVnZXIiKSkpCisjZW5kaWYKIHZvaWQgcHZtcDNfc3RfaW50ZW5zaXR5KGludDMyIHhyW1NVQkJBTkRTX05VTUJFUipGSUxURVJCQU5LX0JBTkRTXSwKICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyIHhsW1NVQkJBTkRTX05VTUJFUipGSUxURVJCQU5LX0JBTkRTXSwKICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyIGlzX3BvcywKZGlmZiAtLWdpdCBhL21lZGlhL2V4dHJhY3RvcnMvdGVzdHMvQW5kcm9pZC5icCBiL21lZGlhL2V4dHJhY3RvcnMvdGVzdHMvQW5kcm9pZC5icAppbmRleCA1ZDk3ZDlhLi4yM2M3NGY3IDEwMDY0NAotLS0gYS9tZWRpYS9leHRyYWN0b3JzL3Rlc3RzL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvZXh0cmFjdG9ycy90ZXN0cy9BbmRyb2lkLmJwCkBAIC00NSwxNCArNDUsMTEgQEAKICAgICAgICAgImxpYmRhdGFzb3VyY2UiLAogICAgICAgICAibGlid2F0Y2hkb2ciLAogCi0gICAgICAgICJsaWJzdGFnZWZyaWdodCIsCiAgICAgICAgICJsaWJzdGFnZWZyaWdodF9pZDMiLAogICAgICAgICAibGlic3RhZ2VmcmlnaHRfZmxhY2RlYyIsCiAgICAgICAgICJsaWJzdGFnZWZyaWdodF9lc2RzIiwKICAgICAgICAgImxpYnN0YWdlZnJpZ2h0X21wZWcyc3VwcG9ydCIsCi0gICAgICAgICJsaWJzdGFnZWZyaWdodF9tcGVnMmV4dHJhY3RvciIsCiAgICAgICAgICJsaWJzdGFnZWZyaWdodF9mb3VuZGF0aW9uX2NvbG9ydXRpbHNfbmRrIiwKLSAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24iLAogICAgICAgICAibGlic3RhZ2VmcmlnaHRfbWV0YWRhdGF1dGlscyIsCiAKICAgICAgICAgImxpYm1lZGlhX21pZGlpb3dyYXBwZXIiLApAQCAtNzQsNiArNzEsOCBAQAogICAgICAgICAibGliY3V0aWxzIiwKICAgICAgICAgImxpYm1lZGlhbmRrIiwKICAgICAgICAgImxpYm1lZGlhIiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0IiwKKyAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24iLAogICAgICAgICAibGliY3J5cHRvIiwKICAgICAgICAgImxpYmhpZGxtZW1vcnkiLAogICAgICAgICAibGliaGlkbGJhc2UiLApkaWZmIC0tZ2l0IGEvbWVkaWEvamFuaXRvcnMvY29kZWNfT1dORVJTIGIvbWVkaWEvamFuaXRvcnMvY29kZWNfT1dORVJTCmluZGV4IGUyMDEzOTkuLmQ0ZWU1MWIgMTAwNjQ0Ci0tLSBhL21lZGlhL2phbml0b3JzL2NvZGVjX09XTkVSUworKysgYi9tZWRpYS9qYW5pdG9ycy9jb2RlY19PV05FUlMKQEAgLTIsNCArMiw0IEBACiAjIGRpZmZlcmVudGlhdGVkIGZyb20gcGx1Z2lucyBjb25uZWN0aW5nIHRob3NlIGNvZGVjcyB0byBlaXRoZXIgb214IG9yIGNvZGVjMiBpbmZyYXN0cnVjdHVyZQogZXNzaWNrQGdvb2dsZS5jb20KIGxham9zQGdvb2dsZS5jb20KLW1hcmNvbmVAZ29vZ2xlLmNvbQord29uc2lrQGdvb2dsZS5jb20KZGlmZiAtLWdpdCBhL21lZGlhL2phbml0b3JzL3JlbGlhYmlsaXR5X21haW5saW5lX09XTkVSUyBiL21lZGlhL2phbml0b3JzL3JlbGlhYmlsaXR5X21haW5saW5lX09XTkVSUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGM0ZmMyCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvamFuaXRvcnMvcmVsaWFiaWxpdHlfbWFpbmxpbmVfT1dORVJTCkBAIC0wLDAgKzEsNSBAQAorIyBCdWcgY29tcG9uZW50OiAxMDUxMzA5CisjIGdvL2FuZHJvaWQtbWVkaWEtcmVsYWliaWxpdHkKKworZXNzaWNrQGdvb2dsZS5jb20KK25jaGFsa29AZ29vZ2xlLmNvbQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9jbGllbnQvQW5kcm9pZC5icCBiL21lZGlhL2xpYmF1ZGlvY2xpZW50L0FuZHJvaWQuYnAKaW5kZXggM2MzZDM0MC4uZmUwMjRmMyAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYXVkaW9jbGllbnQvQW5kcm9pZC5icAorKysgYi9tZWRpYS9saWJhdWRpb2NsaWVudC9BbmRyb2lkLmJwCkBAIC0xMzYsNiArMTM2LDcgQEAKICAgICAgICAgImxpYnV0aWxzIiwKICAgICAgICAgImxpYnZpYnJhdG9yIiwKICAgICAgICAgImZyYW1ld29yay1wZXJtaXNzaW9uLWFpZGwtY3BwIiwKKyAgICAgICAgInBhY2thZ2VtYW5hZ2VyX2FpZGwtY3BwIiwKICAgICBdLAogICAgIGV4cG9ydF9zaGFyZWRfbGliX2hlYWRlcnM6IFsKICAgICAgICAgImF1ZGlvZmxpbmdlci1haWRsLWNwcCIsCkBAIC0yMDEsNyArMjAyLDcgQEAKICAgICBdLAogICAgIGFwZXhfYXZhaWxhYmxlOiBbCiAgICAgICAgICIvL2FwZXhfYXZhaWxhYmxlOnBsYXRmb3JtIiwKLSAgICAgICAgImNvbS5hbmRyb2lkLmJsdWV0b290aC51cGRhdGFibGUiLAorICAgICAgICAiY29tLmFuZHJvaWQuYmx1ZXRvb3RoIiwKICAgICAgICAgImNvbS5hbmRyb2lkLm1lZGlhIiwKICAgICAgICAgImNvbS5hbmRyb2lkLm1lZGlhLnN3Y29kZWMiLAogICAgIF0sCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2NsaWVudC9BdWRpb1JlY29yZC5jcHAgYi9tZWRpYS9saWJhdWRpb2NsaWVudC9BdWRpb1JlY29yZC5jcHAKaW5kZXggZGEyMTc3MS4uMjJmMDI5NSAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYXVkaW9jbGllbnQvQXVkaW9SZWNvcmQuY3BwCisrKyBiL21lZGlhL2xpYmF1ZGlvY2xpZW50L0F1ZGlvUmVjb3JkLmNwcApAQCAtMjA1LDE2ICsyMDUsMTggQEAKICAgICAvLyBPdGhlcndpc2UgdGhlIGNhbGxiYWNrIHRocmVhZCB3aWxsIG5ldmVyIGV4aXQuCiAgICAgc3RvcCgpOwogICAgIGlmIChtQXVkaW9SZWNvcmRUaHJlYWQgIT0gMCkgewotICAgICAgICBtUHJveHktPmludGVycnVwdCgpOwogICAgICAgICBtQXVkaW9SZWNvcmRUaHJlYWQtPnJlcXVlc3RFeGl0KCk7ICAvLyBzZWUgY29tbWVudCBpbiBBdWRpb1JlY29yZC5oCisgICAgICAgIG1Qcm94eS0+aW50ZXJydXB0KCk7CiAgICAgICAgIG1BdWRpb1JlY29yZFRocmVhZC0+cmVxdWVzdEV4aXRBbmRXYWl0KCk7CiAgICAgICAgIG1BdWRpb1JlY29yZFRocmVhZC5jbGVhcigpOwogICAgIH0KLSAgICAvLyBObyBsb2NrIGhlcmU6IHdvcnN0IGNhc2Ugd2UgcmVtb3ZlIGEgTlVMTCBjYWxsYmFjayB3aGljaCB3aWxsIGJlIGEgbm9wCisKKyAgICBBdXRvTXV0ZXggbG9jayhtTG9jayk7CiAgICAgaWYgKG1EZXZpY2VDYWxsYmFjayAhPSAwICYmIG1JbnB1dCAhPSBBVURJT19JT19IQU5ETEVfTk9ORSkgewogICAgICAgICAvLyBUaGlzIG1heSBub3Qgc3RvcCBhbGwgb2YgdGhlc2UgZGV2aWNlIGNhbGxiYWNrcyEKICAgICAgICAgLy8gVE9ETzogQWRkIHNvbWUgc29ydCBvZiBwcm90ZWN0aW9uLgogICAgICAgICBBdWRpb1N5c3RlbTo6cmVtb3ZlQXVkaW9EZXZpY2VDYWxsYmFjayh0aGlzLCBtSW5wdXQsIG1Qb3J0SWQpOworICAgICAgICBtRGV2aWNlQ2FsbGJhY2suY2xlYXIoKTsKICAgICB9CiB9CiBzdGF0dXNfdCBBdWRpb1JlY29yZDo6c2V0KApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9jbGllbnQvQXVkaW9TeXN0ZW0uY3BwIGIvbWVkaWEvbGliYXVkaW9jbGllbnQvQXVkaW9TeXN0ZW0uY3BwCmluZGV4IGM3OTY3ZTUuLjEzOWQ5MzEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmF1ZGlvY2xpZW50L0F1ZGlvU3lzdGVtLmNwcAorKysgYi9tZWRpYS9saWJhdWRpb2NsaWVudC9BdWRpb1N5c3RlbS5jcHAKQEAgLTE5NjYsOCArMTk2Niw4IEBACiAgICAgcmV0dXJuIHJlc3VsdC52YWx1ZV9vcihmYWxzZSk7CiB9CiAKLXN0YXR1c190IEF1ZGlvU3lzdGVtOjpnZXRId09mZmxvYWRFbmNvZGluZ0Zvcm1hdHNTdXBwb3J0ZWRGb3JBMkRQKAotICAgICAgICBzdGQ6OnZlY3RvcjxhdWRpb19mb3JtYXRfdD4qIGZvcm1hdHMpIHsKK3N0YXR1c190IEF1ZGlvU3lzdGVtOjpnZXRId09mZmxvYWRGb3JtYXRzU3VwcG9ydGVkRm9yQmx1ZXRvb3RoTWVkaWEoCisgICAgICAgIGF1ZGlvX2RldmljZXNfdCBkZXZpY2UsIHN0ZDo6dmVjdG9yPGF1ZGlvX2Zvcm1hdF90PiogZm9ybWF0cykgewogICAgIGlmIChmb3JtYXRzID09IG51bGxwdHIpIHsKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9CkBAIC0xOTc3LDggKzE5NzcsMTAgQEAKICAgICBpZiAoYXBzID09IDApIHJldHVybiBQRVJNSVNTSU9OX0RFTklFRDsKIAogICAgIHN0ZDo6dmVjdG9yPG1lZGlhOjphdWRpbzo6Y29tbW9uOjpBdWRpb0Zvcm1hdD4gZm9ybWF0c0FpZGw7CisgICAgaW50MzJfdCBkZXZpY2VBaWRsID0gVkFMVUVfT1JfUkVUVVJOX1NUQVRVUyhsZWdhY3kyYWlkbF9hdWRpb19kZXZpY2VzX3RfaW50MzJfdChkZXZpY2UpKTsKKwogICAgIFJFVFVSTl9TVEFUVVNfSUZfRVJST1Ioc3RhdHVzVEZyb21CaW5kZXJTdGF0dXMoCi0gICAgICAgICAgICBhcHMtPmdldEh3T2ZmbG9hZEVuY29kaW5nRm9ybWF0c1N1cHBvcnRlZEZvckEyRFAoJmZvcm1hdHNBaWRsKSkpOworICAgICAgICAgICAgYXBzLT5nZXRId09mZmxvYWRGb3JtYXRzU3VwcG9ydGVkRm9yQmx1ZXRvb3RoTWVkaWEoZGV2aWNlQWlkbCwgJmZvcm1hdHNBaWRsKSkpOwogICAgICpmb3JtYXRzID0gVkFMVUVfT1JfUkVUVVJOX1NUQVRVUygKICAgICAgICAgICAgIGNvbnZlcnRDb250YWluZXI8c3RkOjp2ZWN0b3I8YXVkaW9fZm9ybWF0X3Q+Pihmb3JtYXRzQWlkbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWRsMmxlZ2FjeV9BdWRpb0Zvcm1hdF9hdWRpb19mb3JtYXRfdCkpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9jbGllbnQvQXVkaW9UcmFjay5jcHAgYi9tZWRpYS9saWJhdWRpb2NsaWVudC9BdWRpb1RyYWNrLmNwcAppbmRleCA1MzYxMDFhLi4yMzI4MDMzIDEwMDY0NAotLS0gYS9tZWRpYS9saWJhdWRpb2NsaWVudC9BdWRpb1RyYWNrLmNwcAorKysgYi9tZWRpYS9saWJhdWRpb2NsaWVudC9BdWRpb1RyYWNrLmNwcApAQCAtMzU3LDEyICszNTcsMTMgQEAKICAgICAvLyBPdGhlcndpc2UgdGhlIGNhbGxiYWNrIHRocmVhZCB3aWxsIG5ldmVyIGV4aXQuCiAgICAgc3RvcCgpOwogICAgIGlmIChtQXVkaW9UcmFja1RocmVhZCAhPSAwKSB7IC8vIG5vdCB0aHJlYWQgc2FmZQotICAgICAgICBtUHJveHktPmludGVycnVwdCgpOwogICAgICAgICBtQXVkaW9UcmFja1RocmVhZC0+cmVxdWVzdEV4aXQoKTsgICAvLyBzZWUgY29tbWVudCBpbiBBdWRpb1RyYWNrLmgKKyAgICAgICAgbVByb3h5LT5pbnRlcnJ1cHQoKTsKICAgICAgICAgbUF1ZGlvVHJhY2tUaHJlYWQtPnJlcXVlc3RFeGl0QW5kV2FpdCgpOwogICAgICAgICBtQXVkaW9UcmFja1RocmVhZC5jbGVhcigpOwogICAgIH0KLSAgICAvLyBObyBsb2NrIGhlcmU6IHdvcnN0IGNhc2Ugd2UgcmVtb3ZlIGEgTlVMTCBjYWxsYmFjayB3aGljaCB3aWxsIGJlIGEgbm9wCisKKyAgICBBdXRvTXV0ZXggbG9jayhtTG9jayk7CiAgICAgaWYgKG1EZXZpY2VDYWxsYmFjayAhPSAwICYmIG1PdXRwdXQgIT0gQVVESU9fSU9fSEFORExFX05PTkUpIHsKICAgICAgICAgLy8gVGhpcyBtYXkgbm90IHN0b3AgYWxsIG9mIHRoZXNlIGRldmljZSBjYWxsYmFja3MhCiAgICAgICAgIC8vIFRPRE86IEFkZCBzb21lIHNvcnQgb2YgcHJvdGVjdGlvbi4KZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvY2xpZW50L0F1ZGlvVHJhY2tTaGFyZWQuY3BwIGIvbWVkaWEvbGliYXVkaW9jbGllbnQvQXVkaW9UcmFja1NoYXJlZC5jcHAKaW5kZXggMzU3MTliZS4uZGEyN2RjOCAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYXVkaW9jbGllbnQvQXVkaW9UcmFja1NoYXJlZC5jcHAKKysrIGIvbWVkaWEvbGliYXVkaW9jbGllbnQvQXVkaW9UcmFja1NoYXJlZC5jcHAKQEAgLTQwOSw3ICs0MDksNyBAQAogICAgICAgICBhbmRyb2lkX2F0b21pY19vcihDQkxLX0ZVVEVYX1dBS0UsICZjYmxrLT5tRnV0ZXgpOwogICAgICAgICAvLyBpdCBzZWVtcyB0aGF0IGEgRlVURVhfV0FLRV9QUklWQVRFIHdpbGwgbm90IHdha2UgYSBGVVRFWF9XQUlULCBldmVuIHdpdGhpbiBzYW1lIHByb2Nlc3MKICAgICAgICAgKHZvaWQpIHN5c2NhbGwoX19OUl9mdXRleCwgJmNibGstPm1GdXRleCwgbUNsaWVudEluU2VydmVyID8gRlVURVhfV0FLRV9QUklWQVRFIDogRlVURVhfV0FLRSwKLSAgICAgICAgICAgICAgICAxKTsKKyAgICAgICAgICAgICAgICBJTlRfTUFYKTsKICAgICB9CiB9CiAKQEAgLTQxOSw3ICs0MTksNyBAQAogICAgIGlmICghKGFuZHJvaWRfYXRvbWljX29yKENCTEtfSU5URVJSVVBULCAmY2Jsay0+bUZsYWdzKSAmIENCTEtfSU5URVJSVVBUKSkgewogICAgICAgICBhbmRyb2lkX2F0b21pY19vcihDQkxLX0ZVVEVYX1dBS0UsICZjYmxrLT5tRnV0ZXgpOwogICAgICAgICAodm9pZCkgc3lzY2FsbChfX05SX2Z1dGV4LCAmY2Jsay0+bUZ1dGV4LCBtQ2xpZW50SW5TZXJ2ZXIgPyBGVVRFWF9XQUtFX1BSSVZBVEUgOiBGVVRFWF9XQUtFLAotICAgICAgICAgICAgICAgIDEpOworICAgICAgICAgICAgICAgIElOVF9NQVgpOwogICAgIH0KIH0KIApAQCAtNzQ3LDcgKzc0Nyw3IEBACiAgICAgICAgICAgICBpbnQzMl90IG9sZCA9IGFuZHJvaWRfYXRvbWljX29yKENCTEtfRlVURVhfV0FLRSwgJmNibGstPm1GdXRleCk7CiAgICAgICAgICAgICBpZiAoIShvbGQgJiBDQkxLX0ZVVEVYX1dBS0UpKSB7CiAgICAgICAgICAgICAgICAgKHZvaWQpIHN5c2NhbGwoX19OUl9mdXRleCwgJmNibGstPm1GdXRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1DbGllbnRJblNlcnZlciA/IEZVVEVYX1dBS0VfUFJJVkFURSA6IEZVVEVYX1dBS0UsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgbUNsaWVudEluU2VydmVyID8gRlVURVhfV0FLRV9QUklWQVRFIDogRlVURVhfV0FLRSwgSU5UX01BWCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbUZsdXNoZWQgKz0gKG5ld0Zyb250IC0gZnJvbnQpICYgbWFzazsKQEAgLTkxNyw3ICs5MTcsNyBAQAogICAgICAgICBpbnQzMl90IG9sZCA9IGFuZHJvaWRfYXRvbWljX29yKENCTEtfRlVURVhfV0FLRSwgJmNibGstPm1GdXRleCk7CiAgICAgICAgIGlmICghKG9sZCAmIENCTEtfRlVURVhfV0FLRSkpIHsKICAgICAgICAgICAgICh2b2lkKSBzeXNjYWxsKF9fTlJfZnV0ZXgsICZjYmxrLT5tRnV0ZXgsCi0gICAgICAgICAgICAgICAgICAgIG1DbGllbnRJblNlcnZlciA/IEZVVEVYX1dBS0VfUFJJVkFURSA6IEZVVEVYX1dBS0UsIDEpOworICAgICAgICAgICAgICAgICAgICBtQ2xpZW50SW5TZXJ2ZXIgPyBGVVRFWF9XQUtFX1BSSVZBVEUgOiBGVVRFWF9XQUtFLCBJTlRfTUFYKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9jbGllbnQvYWlkbC9hbmRyb2lkL21lZGlhL0lBdWRpb1BvbGljeVNlcnZpY2UuYWlkbCBiL21lZGlhL2xpYmF1ZGlvY2xpZW50L2FpZGwvYW5kcm9pZC9tZWRpYS9JQXVkaW9Qb2xpY3lTZXJ2aWNlLmFpZGwKaW5kZXggNWYwYTFkZS4uNjE0MGE2NCAxMDA2NDQKLS0tIGEvbWVkaWEvbGliYXVkaW9jbGllbnQvYWlkbC9hbmRyb2lkL21lZGlhL0lBdWRpb1BvbGljeVNlcnZpY2UuYWlkbAorKysgYi9tZWRpYS9saWJhdWRpb2NsaWVudC9haWRsL2FuZHJvaWQvbWVkaWEvSUF1ZGlvUG9saWN5U2VydmljZS5haWRsCkBAIC0yOTUsNyArMjk1LDcgQEAKICAgICB2b2lkIGdldFJlcG9ydGVkU3Vycm91bmRGb3JtYXRzKGlub3V0IEludCBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCBBdWRpb0Zvcm1hdFtdIGZvcm1hdHMpOwogCi0gICAgQXVkaW9Gb3JtYXRbXSBnZXRId09mZmxvYWRFbmNvZGluZ0Zvcm1hdHNTdXBwb3J0ZWRGb3JBMkRQKCk7CisgICAgQXVkaW9Gb3JtYXRbXSBnZXRId09mZmxvYWRGb3JtYXRzU3VwcG9ydGVkRm9yQmx1ZXRvb3RoTWVkaWEoaW50IC8qIGF1ZGlvX2RldmljZXNfdCAqLyBkZXZpY2UpOwogCiAgICAgdm9pZCBzZXRTdXJyb3VuZEZvcm1hdEVuYWJsZWQoQXVkaW9Gb3JtYXQgYXVkaW9Gb3JtYXQsIGJvb2xlYW4gZW5hYmxlZCk7CiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmF1ZGlvY2xpZW50L2luY2x1ZGUvbWVkaWEvQXVkaW9TeXN0ZW0uaCBiL21lZGlhL2xpYmF1ZGlvY2xpZW50L2luY2x1ZGUvbWVkaWEvQXVkaW9TeXN0ZW0uaAppbmRleCA4NjliZDZlLi40ZDg1ZjdhIDEwMDY0NAotLS0gYS9tZWRpYS9saWJhdWRpb2NsaWVudC9pbmNsdWRlL21lZGlhL0F1ZGlvU3lzdGVtLmgKKysrIGIvbWVkaWEvbGliYXVkaW9jbGllbnQvaW5jbHVkZS9tZWRpYS9BdWRpb1N5c3RlbS5oCkBAIC00MjAsOCArNDIwLDggQEAKIAogICAgIHN0YXRpYyBzdGF0dXNfdCBnZXRNaWNyb3Bob25lcyhzdGQ6OnZlY3RvcjxtZWRpYTo6TWljcm9waG9uZUluZm8+ICptaWNyb3Bob25lcyk7CiAKLSAgICBzdGF0aWMgc3RhdHVzX3QgZ2V0SHdPZmZsb2FkRW5jb2RpbmdGb3JtYXRzU3VwcG9ydGVkRm9yQTJEUCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGF1ZGlvX2Zvcm1hdF90PiAqZm9ybWF0cyk7CisgICAgc3RhdGljIHN0YXR1c190IGdldEh3T2ZmbG9hZEZvcm1hdHNTdXBwb3J0ZWRGb3JCbHVldG9vdGhNZWRpYSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2RldmljZXNfdCBkZXZpY2UsIHN0ZDo6dmVjdG9yPGF1ZGlvX2Zvcm1hdF90PiAqZm9ybWF0cyk7CiAKICAgICAvLyBudW1TdXJyb3VuZEZvcm1hdHMgaG9sZHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZvcm1hdHMgYW5kIGJvb2wgdmFsdWUgYWxsb3dlZCBpbiB0aGUgYXJyYXkuCiAgICAgLy8gV2hlbiBudW1TdXJyb3VuZEZvcm1hdHMgaXMgMCwgc3Vycm91bmRGb3JtYXRzIGFuZCBzdXJyb3VuZEZvcm1hdHNFbmFibGVkIHdpbGwgbm90IGJlCmRpZmYgLS1naXQgYS9tZWRpYS9saWJhdWRpb2ZvdW5kYXRpb24vQXVkaW9Db250YWluZXJzLmNwcCBiL21lZGlhL2xpYmF1ZGlvZm91bmRhdGlvbi9BdWRpb0NvbnRhaW5lcnMuY3BwCmluZGV4IDMxMjU3ZDUuLjNkZjkzNzggMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmF1ZGlvZm91bmRhdGlvbi9BdWRpb0NvbnRhaW5lcnMuY3BwCisrKyBiL21lZGlhL2xpYmF1ZGlvZm91bmRhdGlvbi9BdWRpb0NvbnRhaW5lcnMuY3BwCkBAIC02Myw2ICs2MywxMyBAQAogICAgIHJldHVybiBhdWRpb0RldmljZUluQWxsVXNiU2V0OwogfQogCitjb25zdCBEZXZpY2VUeXBlU2V0JiBnZXRBdWRpb0RldmljZU91dEFsbEJsZVNldCgpIHsKKyAgICBzdGF0aWMgY29uc3QgRGV2aWNlVHlwZVNldCBhdWRpb0RldmljZU91dEFsbEJsZVNldCA9IERldmljZVR5cGVTZXQoCisgICAgICAgICAgICBzdGQ6OmJlZ2luKEFVRElPX0RFVklDRV9PVVRfQUxMX0JMRV9BUlJBWSksCisgICAgICAgICAgICBzdGQ6OmVuZChBVURJT19ERVZJQ0VfT1VUX0FMTF9CTEVfQVJSQVkpKTsKKyAgICByZXR1cm4gYXVkaW9EZXZpY2VPdXRBbGxCbGVTZXQ7Cit9CisKIGJvb2wgZGV2aWNlVHlwZXNUb1N0cmluZyhjb25zdCBEZXZpY2VUeXBlU2V0ICZkZXZpY2VUeXBlcywgc3RkOjpzdHJpbmcgJnN0cikgewogICAgIGlmIChkZXZpY2VUeXBlcy5lbXB0eSgpKSB7CiAgICAgICAgIHN0ciA9ICJFbXB0eSBkZXZpY2UgdHlwZXMiOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9mb3VuZGF0aW9uL2luY2x1ZGUvbWVkaWEvQXVkaW9Db250YWluZXJzLmggYi9tZWRpYS9saWJhdWRpb2ZvdW5kYXRpb24vaW5jbHVkZS9tZWRpYS9BdWRpb0NvbnRhaW5lcnMuaAppbmRleCAyMDRiMzY1Li42MGI0MmZiIDEwMDY0NAotLS0gYS9tZWRpYS9saWJhdWRpb2ZvdW5kYXRpb24vaW5jbHVkZS9tZWRpYS9BdWRpb0NvbnRhaW5lcnMuaAorKysgYi9tZWRpYS9saWJhdWRpb2ZvdW5kYXRpb24vaW5jbHVkZS9tZWRpYS9BdWRpb0NvbnRhaW5lcnMuaApAQCAtNDAsNiArNDAsNyBAQAogY29uc3QgRGV2aWNlVHlwZVNldCYgZ2V0QXVkaW9EZXZpY2VPdXRBbGxVc2JTZXQoKTsKIGNvbnN0IERldmljZVR5cGVTZXQmIGdldEF1ZGlvRGV2aWNlSW5BbGxTZXQoKTsKIGNvbnN0IERldmljZVR5cGVTZXQmIGdldEF1ZGlvRGV2aWNlSW5BbGxVc2JTZXQoKTsKK2NvbnN0IERldmljZVR5cGVTZXQmIGdldEF1ZGlvRGV2aWNlT3V0QWxsQmxlU2V0KCk7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdGF0aWMgc3RkOjp2ZWN0b3I8VD4gSW50ZXJzZWN0aW9uKGNvbnN0IHN0ZDo6c2V0PFQ+JiBhLCBjb25zdCBzdGQ6OnNldDxUPiYgYikgewpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliYXVkaW9oYWwvRmFjdG9yeUhhbEhpZGwuY3BwIGIvbWVkaWEvbGliYXVkaW9oYWwvRmFjdG9yeUhhbEhpZGwuY3BwCmluZGV4IGU0MjBkMDcuLmMxOWQyYzIgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmF1ZGlvaGFsL0ZhY3RvcnlIYWxIaWRsLmNwcAorKysgYi9tZWRpYS9saWJhdWRpb2hhbC9GYWN0b3J5SGFsSGlkbC5jcHAKQEAgLTk0LDcgKzk0LDcgQEAKIH0gIC8vIG5hbWVzcGFjZQogCiB2b2lkKiBjcmVhdGVQcmVmZXJyZWRJbXBsKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYWNrYWdlLCBjb25zdCBzdGQ6OnN0cmluZyYgaW50ZXJmYWNlKSB7Ci0gICAgZm9yIChhdXRvIHZlcnNpb24gPSBkZXRhaWw6OnNBdWRpb0hBTFZlcnNpb25zOyB2ZXJzaW9uICE9IG51bGxwdHI7ICsrdmVyc2lvbikgeworICAgIGZvciAoYXV0byB2ZXJzaW9uID0gZGV0YWlsOjpzQXVkaW9IQUxWZXJzaW9uczsgKnZlcnNpb24gIT0gbnVsbHB0cjsgKyt2ZXJzaW9uKSB7CiAgICAgICAgIHZvaWQqIHJhd0ludGVyZmFjZSA9IG51bGxwdHI7CiAgICAgICAgIGlmIChoYXNIYWxTZXJ2aWNlKHBhY2thZ2UsICp2ZXJzaW9uLCBpbnRlcmZhY2UpCiAgICAgICAgICAgICAgICAgJiYgY3JlYXRlSGFsU2VydmljZSgqdmVyc2lvbiwgaW50ZXJmYWNlLCAmcmF3SW50ZXJmYWNlKSkgewpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliZWZmZWN0cy9sdm0vbGliL0VxL3NyYy9MVkVRTkJfQ29udHJvbC5jcHAgYi9tZWRpYS9saWJlZmZlY3RzL2x2bS9saWIvRXEvc3JjL0xWRVFOQl9Db250cm9sLmNwcAppbmRleCAxZWFkZDI3Li5jY2VmNWFiIDEwMDY0NAotLS0gYS9tZWRpYS9saWJlZmZlY3RzL2x2bS9saWIvRXEvc3JjL0xWRVFOQl9Db250cm9sLmNwcAorKysgYi9tZWRpYS9saWJlZmZlY3RzL2x2bS9saWIvRXEvc3JjL0xWRVFOQl9Db250cm9sLmNwcApAQCAtMTM1LDcgKzEzNSw2IEBACiAgICAgTFZNX1VJTlQzMiBmcyA9CiAgICAgICAgICAgICAoTFZNX1VJTlQzMilMVkVRTkJfU2FtcGxlUmF0ZVRhYlsoTFZNX1VJTlQxNilwUGFyYW1zLT5TYW1wbGVSYXRlXTsgLyogU2FtcGxlIHJhdGUgKi8KICAgICBMVk1fVUlOVDMyIGZjOyAgICAgLyogRmlsdGVyIGNlbnRyZSBmcmVxdWVuY3kgKi8KLSAgICBMVk1fSU5UMTYgUUZhY3RvcjsgLyogRmlsdGVyIFEgZmFjdG9yICovCiAKICAgICBwSW5zdGFuY2UtPk5CYW5kcyA9IHBQYXJhbXMtPk5CYW5kczsKIApAQCAtMTQ0LDcgKzE0Myw2IEBACiAgICAgICAgICAqIEdldCB0aGUgZmlsdGVyIHNldHRpbmdzCiAgICAgICAgICAqLwogICAgICAgICBmYyA9IChMVk1fVUlOVDMyKXBQYXJhbXMtPnBCYW5kRGVmaW5pdGlvbltpXS5GcmVxdWVuY3k7IC8qIEdldCB0aGUgYmFuZCBjZW50cmUgZnJlcXVlbmN5ICovCi0gICAgICAgIFFGYWN0b3IgPSAoTFZNX0lOVDE2KXBQYXJhbXMtPnBCYW5kRGVmaW5pdGlvbltpXS5RRmFjdG9yOyAvKiBHZXQgdGhlIGJhbmQgUSBmYWN0b3IgKi8KIAogICAgICAgICBwSW5zdGFuY2UtPnBCaXF1YWRUeXBlW2ldID0gTFZFUU5CX1NpbmdsZVByZWNpc2lvbl9GbG9hdDsgLyogRGVmYXVsdCB0byBzaW5nbGUgcHJlY2lzaW9uICovCiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmVmZmVjdHMvbHZtL2xpYi9TcGVjdHJ1bUFuYWx5emVyL3NyYy9MVlBTQV9Db250cm9sLmNwcCBiL21lZGlhL2xpYmVmZmVjdHMvbHZtL2xpYi9TcGVjdHJ1bUFuYWx5emVyL3NyYy9MVlBTQV9Db250cm9sLmNwcAppbmRleCA4ZTYzNTAyLi5mZmVkNmQ0IDEwMDY0NAotLS0gYS9tZWRpYS9saWJlZmZlY3RzL2x2bS9saWIvU3BlY3RydW1BbmFseXplci9zcmMvTFZQU0FfQ29udHJvbC5jcHAKKysrIGIvbWVkaWEvbGliZWZmZWN0cy9sdm0vbGliL1NwZWN0cnVtQW5hbHl6ZXIvc3JjL0xWUFNBX0NvbnRyb2wuY3BwCkBAIC00MjEsNyArNDIxLDYgQEAKICAgICAgKiBJbnRlcm1lZGlhdGUgdmFyaWFibGVzIGFuZCB0ZW1wb3JhcnkgdmFsdWVzCiAgICAgICovCiAgICAgTFZNX0ZMT0FUIFQwOwotICAgIExWTV9GTE9BVCBEOwogICAgIExWTV9GTE9BVCBBMDsKICAgICBMVk1fRkxPQVQgQjE7CiAgICAgTFZNX0ZMT0FUIEIyOwpAQCAtNDQ0LDkgKzQ0Myw2IEBACiAgICAgICogQ2FsY3VsYXRpbmcgdGhlIGludGVybWVkaWF0ZSB2YWx1ZXMKICAgICAgKi8KICAgICBUMCA9IEZyZXF1ZW5jeSAqIExWUFNBX0Zsb2F0X1R3b1BpT25Gc1RhYmxlW0ZzXTsgLyogVDAgPSAyICogUGkgKiBGYyAvIEZzICovCi0gICAgRCA9IDMyMDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsb2F0aW5nIHBvaW50IHZhbHVlIDEuMDAwMDAwICgxKjEwMCoyXjUpICovCi0gICAgLyogRm9yY2UgRCA9IDEgOiB0aGUgZnVuY3Rpb24gd2FzIG9yaWdpbmFsbHkgdXNlZCBmb3IgYSBwZWFraW5nIGZpbHRlci4KLSAgICAgICBUaGUgRCBwYXJhbWV0ZXIgZG8gbm90IGV4aXN0IGZvciBhIEJhbmRQYXNzIGZpbHRlciBjb2VmZmljaWVudHMgKi8KIAogICAgIC8qCiAgICAgICogQ2FsY3VsYXRlIHRoZSBCMiBjb2VmZmljaWVudApAQCAtNTM1LDcgKzUzMSw2IEBACiAgICAgICogSW50ZXJtZWRpYXRlIHZhcmlhYmxlcyBhbmQgdGVtcG9yYXJ5IHZhbHVlcwogICAgICAqLwogICAgIExWTV9GTE9BVCBUMDsKLSAgICBMVk1fRkxPQVQgRDsKICAgICBMVk1fRkxPQVQgQTA7CiAgICAgTFZNX0ZMT0FUIEIxOwogICAgIExWTV9GTE9BVCBCMjsKQEAgLTU1OCw5ICs1NTMsNiBAQAogICAgICAqIENhbGN1bGF0aW5nIHRoZSBpbnRlcm1lZGlhdGUgdmFsdWVzCiAgICAgICovCiAgICAgVDAgPSBGcmVxdWVuY3kgKiBMVlBTQV9GbG9hdF9Ud29QaU9uRnNUYWJsZVtGc107IC8qIFQwID0gMiAqIFBpICogRmMgLyBGcyAqLwotICAgIEQgPSAzMjAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbG9hdGluZyBwb2ludCB2YWx1ZSAxLjAwMDAwMCAoMSoxMDAqMl41KSAqLwotICAgIC8qIEZvcmNlIEQgPSAxIDogdGhlIGZ1bmN0aW9uIHdhcyBvcmlnaW5hbGx5IHVzZWQgZm9yIGEgcGVha2luZyBmaWx0ZXIuCi0gICAgICAgVGhlIEQgcGFyYW1ldGVyIGRvIG5vdCBleGlzdCBmb3IgYSBCYW5kUGFzcyBmaWx0ZXIgY29lZmZpY2llbnRzICovCiAKICAgICAvKgogICAgICAqIENhbGN1bGF0ZSB0aGUgQjIgY29lZmZpY2llbnQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmVmZmVjdHMvcHJlcHJvY2Vzc2luZy8uY2xhbmctZm9ybWF0IGIvbWVkaWEvbGliZWZmZWN0cy9wcmVwcm9jZXNzaW5nLy5jbGFuZy1mb3JtYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IGYxYjRmNjkuLjAwMDAwMDAKLS0tIGEvbWVkaWEvbGliZWZmZWN0cy9wcmVwcm9jZXNzaW5nLy5jbGFuZy1mb3JtYXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uLi8uLi8uLi8uLi8uLi9idWlsZC9zb29uZy9zY3JpcHRzL3N5c3RlbS1jbGFuZy1mb3JtYXQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZWRpYS9saWJlZmZlY3RzL3ByZXByb2Nlc3NpbmcvdGVzdHMvY29ycmVsYXRpb24uY3BwIGIvbWVkaWEvbGliZWZmZWN0cy9wcmVwcm9jZXNzaW5nL3Rlc3RzL2NvcnJlbGF0aW9uLmNwcAppbmRleCBlYjU2ZmMzLi4wODUzNjczIDEwMDY0NAotLS0gYS9tZWRpYS9saWJlZmZlY3RzL3ByZXByb2Nlc3NpbmcvdGVzdHMvY29ycmVsYXRpb24uY3BwCisrKyBiL21lZGlhL2xpYmVmZmVjdHMvcHJlcHJvY2Vzc2luZy90ZXN0cy9jb3JyZWxhdGlvbi5jcHAKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQxNl90KiBzaWdZLCBpbnQgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3QgZW5hYmxlQ3Jvc3NDb3JyKSB7CiAgICAgZmxvYXQgbWF4Q29yclZhbCA9IDAuZiwgcHJldkNvcnJWYWwgPSAwLmY7Ci0gICAgaW50IGRlbGF5ID0gMCwgcGVha0luZGV4ID0gMCwgZmxhZyA9IDA7CisgICAgaW50IHBlYWtJbmRleCA9IDAsIGZsYWcgPSAwOwogICAgIGludCBsb29wTGltID0gKDEgPT0gZW5hYmxlQ3Jvc3NDb3JyKSA/IGxlbiA6IGtNaW5Mb29wTGltaXRWYWx1ZTsKICAgICBzdGQ6OnZlY3RvcjxpbnQ+IHBlYWtJbmRleFZlY3Qoa051bVBlYWtzLCAwKTsKICAgICBzdGQ6OnZlY3RvcjxmbG9hdD4gcGVha1ZhbHVlVmVjdChrTnVtUGVha3MsIDAuZik7CkBAIC00Nyw3ICs0Nyw2IEBACiAgICAgICAgIH0KICAgICAgICAgY29yclZhbCAvPSBsZW4gLSBpOwogICAgICAgICBpZiAoY29yclZhbCA+IG1heENvcnJWYWwpIHsKLSAgICAgICAgICAgIGRlbGF5ID0gaTsKICAgICAgICAgICAgIG1heENvcnJWYWwgPSBjb3JyVmFsOwogICAgICAgICB9CiAgICAgICAgIC8vIENvcnJlbGF0aW9uIHBlYWtzIGFyZSBleHBlY3RlZCB0byBiZSBvYnNlcnZlZCBhdCBlcXVhbCBpbnRlcnZhbHMuIFRoZSBpbnRlcnZhbCBsZW5ndGggaXMKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmhlaWYvSGVpZkRlY29kZXJJbXBsLmNwcCBiL21lZGlhL2xpYmhlaWYvSGVpZkRlY29kZXJJbXBsLmNwcAppbmRleCAyNzNkOTFjLi5mY2FjNTUxIDEwMDY0NAotLS0gYS9tZWRpYS9saWJoZWlmL0hlaWZEZWNvZGVySW1wbC5jcHAKKysrIGIvbWVkaWEvbGliaGVpZi9IZWlmRGVjb2RlckltcGwuY3BwCkBAIC0xNSw2ICsxNSw3IEBACiAgKi8KIAogLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2luY2x1ZGUgImluY2x1ZGUvSGVpZkRlY29kZXJBUEkuaCIKICNkZWZpbmUgTE9HX1RBRyAiSGVpZkRlY29kZXJJbXBsIgogCiAjaW5jbHVkZSAiSGVpZkRlY29kZXJJbXBsLmgiCkBAIC00NjQsNyArNDY1LDcgQEAKIH0KIAogYm9vbCBIZWlmRGVjb2RlckltcGw6OnNldE91dHB1dENvbG9yKEhlaWZDb2xvckZvcm1hdCBoZWlmQ29sb3IpIHsKLSAgICBpZiAoaGVpZkNvbG9yID09IG1PdXRwdXRDb2xvcikgeworICAgIGlmIChoZWlmQ29sb3IgPT0gKEhlaWZDb2xvckZvcm1hdCltT3V0cHV0Q29sb3IpIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9BbmRyb2lkLmJwIGIvbWVkaWEvbGlibWVkaWEvQW5kcm9pZC5icAppbmRleCBlOThkN2Q4Li45YzFiNTYzIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYS9BbmRyb2lkLmJwCisrKyBiL21lZGlhL2xpYm1lZGlhL0FuZHJvaWQuYnAKQEAgLTM3OCwxMiArMzc4LDEyIEBACiAgICAgXSwKIAogICAgIHN0YXRpY19saWJzOiBbCi0gICAgICAgICJyZXNvdXJjZW1hbmFnZXJfYWlkbF9pbnRlcmZhY2UtbmRrX3BsYXRmb3JtIiwKKyAgICAgICAgInJlc291cmNlbWFuYWdlcl9haWRsX2ludGVyZmFjZS1uZGsiLAogICAgICAgICAiZnJhbWV3b3JrLXBlcm1pc3Npb24tYWlkbC1jcHAiLAogICAgIF0sCiAKICAgICBleHBvcnRfc3RhdGljX2xpYl9oZWFkZXJzOiBbCi0gICAgICAgICJyZXNvdXJjZW1hbmFnZXJfYWlkbF9pbnRlcmZhY2UtbmRrX3BsYXRmb3JtIiwKKyAgICAgICAgInJlc291cmNlbWFuYWdlcl9haWRsX2ludGVyZmFjZS1uZGsiLAogICAgICAgICAiZnJhbWV3b3JrLXBlcm1pc3Npb24tYWlkbC1jcHAiLAogICAgIF0sCiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhL21lZGlhcGxheWVyLmNwcCBiL21lZGlhL2xpYm1lZGlhL21lZGlhcGxheWVyLmNwcAppbmRleCAxYzliOWU0Li41MjE1YzFiIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYS9tZWRpYXBsYXllci5jcHAKKysrIGIvbWVkaWEvbGlibWVkaWEvbWVkaWFwbGF5ZXIuY3BwCkBAIC05NDksNiArOTQ5LDkgQEAKICAgICAgICAgbVZpZGVvV2lkdGggPSBleHQxOwogICAgICAgICBtVmlkZW9IZWlnaHQgPSBleHQyOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE1FRElBX1NUQVJURUQ6CisgICAgICAgIEFMT0dWKCJSZWNlaXZlZCBtZWRpYSBzdGFydGVkIG1lc3NhZ2UiKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNRURJQV9OT1RJRllfVElNRToKICAgICAgICAgQUxPR1YoIlJlY2VpdmVkIG5vdGlmeSB0aW1lIG1lc3NhZ2UiKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS94c2QvdnRzL09XTkVSUyBiL21lZGlhL2xpYm1lZGlhL3hzZC92dHMvT1dORVJTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZjJlYmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJtZWRpYS94c2QvdnRzL09XTkVSUwpAQCAtMCwwICsxLDIgQEAKKyMgQnVnIGNvbXBvbmVudDogMTUxODYyCitzdW5kb25nYWhuQGdvb2dsZS5jb20KZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhaGVscGVyL0FuZHJvaWQuYnAgYi9tZWRpYS9saWJtZWRpYWhlbHBlci9BbmRyb2lkLmJwCmluZGV4IDliNTQxOTkuLmE0MzNmYzYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhaGVscGVyL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvbGlibWVkaWFoZWxwZXIvQW5kcm9pZC5icApAQCAtMjAsNyArMjAsNyBAQAogICAgIH0sCiAgICAgYXBleF9hdmFpbGFibGU6IFsKICAgICAgICAgIi8vYXBleF9hdmFpbGFibGU6cGxhdGZvcm0iLAotICAgICAgICAiY29tLmFuZHJvaWQuYmx1ZXRvb3RoLnVwZGF0YWJsZSIsCisgICAgICAgICJjb20uYW5kcm9pZC5ibHVldG9vdGgiLAogICAgICAgICAiY29tLmFuZHJvaWQubWVkaWEiLAogICAgICAgICAiY29tLmFuZHJvaWQubWVkaWEuc3djb2RlYyIsCiAgICAgXSwKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9BbmRyb2lkLmJwIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL0FuZHJvaWQuYnAKaW5kZXggZjU1Njc4ZC4uYzQxNmE1MSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL0FuZHJvaWQuYnAKQEAgLTY1LDYgKzY1LDcgQEAKICAgICAgICAgImxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24iLAogICAgICAgICAibGlic3RhZ2VmcmlnaHRfaHR0cGxpdmUiLAogICAgICAgICAibGlidXRpbHMiLAorICAgICAgICAicGFja2FnZW1hbmFnZXJfYWlkbC1jcHAiLAogICAgIF0sCiAKICAgICBoZWFkZXJfbGliczogWwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL1N0YWdlZnJpZ2h0TWV0YWRhdGFSZXRyaWV2ZXIuY3BwIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL1N0YWdlZnJpZ2h0TWV0YWRhdGFSZXRyaWV2ZXIuY3BwCmluZGV4IDJhYWJkNTMuLjhjODZlMTYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9TdGFnZWZyaWdodE1ldGFkYXRhUmV0cmlldmVyLmNwcAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvU3RhZ2VmcmlnaHRNZXRhZGF0YVJldHJpZXZlci5jcHAKQEAgLTIyNSwxMCArMjI1LDI2IEBACiAgICAgICAgICAgICAibWVkaWEuc3RhZ2VmcmlnaHQudGh1bWJuYWlsLnByZWZlcl9od19jb2RlY3MiLCBmYWxzZSk7CiAgICAgdWludDMyX3QgZmxhZ3MgPSBwcmVmZXJodyA/IDAgOiBNZWRpYUNvZGVjTGlzdDo6a1ByZWZlclNvZnR3YXJlQ29kZWNzOwogICAgIFZlY3RvcjxBU3RyaW5nPiBtYXRjaGluZ0NvZGVjczsKKyAgICBzcDxBTWVzc2FnZT4gZm9ybWF0ID0gbmV3IEFNZXNzYWdlOworICAgIHN0YXR1c190IGVyciA9IGNvbnZlcnRNZXRhRGF0YVRvTWVzc2FnZSh0cmFja01ldGEsICZmb3JtYXQpOworICAgIGlmIChlcnIgIT0gT0spIHsKKyAgICAgICAgZm9ybWF0ID0gTlVMTDsKKyAgICB9CisKKyAgICAvLyBJZiBkZWNvZGluZyB0aHVtYm5haWwgY2hlY2sgZGVjb2RlciBzdXBwb3J0cyB0aHVtYm5haWwgZGltZW5zaW9ucyBpbnN0ZWFkCisgICAgaW50MzJfdCB0aHVtYkhlaWdodCwgdGh1bWJXaWR0aDsKKyAgICBpZiAodGh1bWJuYWlsICYmIGZvcm1hdCAhPSBOVUxMCisgICAgICAgICAgICAmJiB0cmFja01ldGEtPmZpbmRJbnQzMihrS2V5VGh1bWJuYWlsSGVpZ2h0LCAmdGh1bWJIZWlnaHQpCisgICAgICAgICAgICAmJiB0cmFja01ldGEtPmZpbmRJbnQzMihrS2V5VGh1bWJuYWlsV2lkdGgsICZ0aHVtYldpZHRoKSkgeworICAgICAgICBmb3JtYXQtPnNldEludDMyKCJoZWlnaHQiLCB0aHVtYkhlaWdodCk7CisgICAgICAgIGZvcm1hdC0+c2V0SW50MzIoIndpZHRoIiwgdGh1bWJXaWR0aCk7CisgICAgfQorCiAgICAgTWVkaWFDb2RlY0xpc3Q6OmZpbmRNYXRjaGluZ0NvZGVjcygKICAgICAgICAgICAgIG1pbWUsCiAgICAgICAgICAgICBmYWxzZSwgLyogZW5jb2RlciAqLwogICAgICAgICAgICAgZmxhZ3MsCisgICAgICAgICAgICBmb3JtYXQsCiAgICAgICAgICAgICAmbWF0Y2hpbmdDb2RlY3MpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXRjaGluZ0NvZGVjcy5zaXplKCk7ICsraSkgewpAQCAtMzQ4LDExICszNjQsMTggQEAKICAgICBib29sIHByZWZlcmh3ID0gcHJvcGVydHlfZ2V0X2Jvb2woCiAgICAgICAgICAgICAibWVkaWEuc3RhZ2VmcmlnaHQudGh1bWJuYWlsLnByZWZlcl9od19jb2RlY3MiLCBmYWxzZSk7CiAgICAgdWludDMyX3QgZmxhZ3MgPSBwcmVmZXJodyA/IDAgOiBNZWRpYUNvZGVjTGlzdDo6a1ByZWZlclNvZnR3YXJlQ29kZWNzOworICAgIHNwPEFNZXNzYWdlPiBmb3JtYXQgPSBuZXcgQU1lc3NhZ2U7CisgICAgc3RhdHVzX3QgZXJyID0gY29udmVydE1ldGFEYXRhVG9NZXNzYWdlKHRyYWNrTWV0YSwgJmZvcm1hdCk7CisgICAgaWYgKGVyciAhPSBPSykgeworICAgICAgICBmb3JtYXQgPSBOVUxMOworICAgIH0KKwogICAgIFZlY3RvcjxBU3RyaW5nPiBtYXRjaGluZ0NvZGVjczsKICAgICBNZWRpYUNvZGVjTGlzdDo6ZmluZE1hdGNoaW5nQ29kZWNzKAogICAgICAgICAgICAgbWltZSwKICAgICAgICAgICAgIGZhbHNlLCAvKiBlbmNvZGVyICovCiAgICAgICAgICAgICBmbGFncywKKyAgICAgICAgICAgIGZvcm1hdCwKICAgICAgICAgICAgICZtYXRjaGluZ0NvZGVjcyk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hdGNoaW5nQ29kZWNzLnNpemUoKTsgKytpKSB7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvU3RhZ2VmcmlnaHRSZWNvcmRlci5jcHAgYi9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvU3RhZ2VmcmlnaHRSZWNvcmRlci5jcHAKaW5kZXggYmZmZDdiMy4uNjM0N2I3YSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL1N0YWdlZnJpZ2h0UmVjb3JkZXIuY3BwCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9TdGFnZWZyaWdodFJlY29yZGVyLmNwcApAQCAtMTYsNiArMTYsOCBAQAogCiAvLyNkZWZpbmUgTE9HX05ERUJVRyAwCiAjZGVmaW5lIExPR19UQUcgIlN0YWdlZnJpZ2h0UmVjb3JkZXIiCisjZGVmaW5lIEFUUkFDRV9UQUcgQVRSQUNFX1RBR19WSURFTworI2luY2x1ZGUgPHV0aWxzL1RyYWNlLmg+CiAjaW5jbHVkZSA8aW50dHlwZXMuaD4KIC8vIFRPRE8vd29ya2Fyb3VuZDogaW5jbHVkaW5nIGJhc2UgbG9nZ2luZyBub3cgYXMgaXQgY29uZmxpY3RzIHdpdGggQURlYnVnLmgKIC8vIGFuZCBpdCBtdXN0IGJlIGluY2x1ZGVkIGZpcnN0LgpAQCAtMTg1Niw2ICsxODU4LDcgQEAKIC8vIFNldCB1cCB0aGUgYXBwcm9wcmlhdGUgTWVkaWFTb3VyY2UgZGVwZW5kaW5nIG9uIHRoZSBjaG9zZW4gb3B0aW9uCiBzdGF0dXNfdCBTdGFnZWZyaWdodFJlY29yZGVyOjpzZXR1cE1lZGlhU291cmNlKAogICAgICAgICAgICAgICAgICAgICAgIHNwPE1lZGlhU291cmNlPiAqbWVkaWFTb3VyY2UpIHsKKyAgICBBVFJBQ0VfQ0FMTCgpOwogICAgIGlmIChtVmlkZW9Tb3VyY2UgPT0gVklERU9fU09VUkNFX0RFRkFVTFQKICAgICAgICAgICAgIHx8IG1WaWRlb1NvdXJjZSA9PSBWSURFT19TT1VSQ0VfQ0FNRVJBKSB7CiAgICAgICAgIHNwPENhbWVyYVNvdXJjZT4gY2FtZXJhU291cmNlOwpAQCAtMTkzNiw2ICsxOTM5LDcgQEAKIHN0YXR1c190IFN0YWdlZnJpZ2h0UmVjb3JkZXI6OnNldHVwVmlkZW9FbmNvZGVyKAogICAgICAgICBjb25zdCBzcDxNZWRpYVNvdXJjZT4gJmNhbWVyYVNvdXJjZSwKICAgICAgICAgc3A8TWVkaWFDb2RlY1NvdXJjZT4gKnNvdXJjZSkgeworICAgIEFUUkFDRV9DQUxMKCk7CiAgICAgc291cmNlLT5jbGVhcigpOwogCiAgICAgc3A8QU1lc3NhZ2U+IGZvcm1hdCA9IG5ldyBBTWVzc2FnZSgpOwpAQCAtMjExNCw2ICsyMTE4LDcgQEAKIH0KIAogc3RhdHVzX3QgU3RhZ2VmcmlnaHRSZWNvcmRlcjo6c2V0dXBBdWRpb0VuY29kZXIoY29uc3Qgc3A8TWVkaWFXcml0ZXI+JiB3cml0ZXIpIHsKKyAgICBBVFJBQ0VfQ0FMTCgpOwogICAgIHN0YXR1c190IHN0YXR1cyA9IEJBRF9WQUxVRTsKICAgICBpZiAoT0sgIT0gKHN0YXR1cyA9IGNoZWNrQXVkaW9FbmNvZGVyQ2FwYWJpbGl0aWVzKCkpKSB7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvdGVzdHMvQW5kcm9pZC5icCBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS90ZXN0cy9BbmRyb2lkLmJwCmluZGV4IDk4NjI2ZmQuLjk5MjAyYjggMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS90ZXN0cy9BbmRyb2lkLmJwCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS90ZXN0cy9BbmRyb2lkLmJwCkBAIC0zMCw3ICszMCw3IEBACiAgICAgXSwKIAogICAgIHN0YXRpY19saWJzOiBbCi0gICAgICAgICJyZXNvdXJjZW1hbmFnZXJfYWlkbF9pbnRlcmZhY2UtbmRrX3BsYXRmb3JtIiwKKyAgICAgICAgInJlc291cmNlbWFuYWdlcl9haWRsX2ludGVyZmFjZS1uZGsiLAogICAgIF0sCiAKICAgICBpbmNsdWRlX2RpcnM6IFsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhdHJhbnNjb2RpbmcvQW5kcm9pZC5icCBiL21lZGlhL2xpYm1lZGlhdHJhbnNjb2RpbmcvQW5kcm9pZC5icAppbmRleCAwNDI4NTBjLi45Mzc2NTBmIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYXRyYW5zY29kaW5nL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvbGlibWVkaWF0cmFuc2NvZGluZy9BbmRyb2lkLmJwCkBAIC0xMDYsOCArMTA2LDggQEAKICAgICBleHBvcnRfaW5jbHVkZV9kaXJzOiBbImluY2x1ZGUiXSwKIAogICAgIHN0YXRpY19saWJzOiBbCi0gICAgICAgICJtZWRpYXRyYW5zY29kaW5nX2FpZGxfaW50ZXJmYWNlLW5ka19wbGF0Zm9ybSIsCi0gICAgICAgICJyZXNvdXJjZW9ic2VydmVyX2FpZGxfaW50ZXJmYWNlLVYxLW5ka19wbGF0Zm9ybSIsCisgICAgICAgICJtZWRpYXRyYW5zY29kaW5nX2FpZGxfaW50ZXJmYWNlLW5kayIsCisgICAgICAgICJyZXNvdXJjZW9ic2VydmVyX2FpZGxfaW50ZXJmYWNlLVYxLW5kayIsCiAgICAgICAgICJsaWJzdGF0c2xvZ19tZWRpYSIsCiAgICAgXSwKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWF0cmFuc2NvZGluZy9pbmNsdWRlL21lZGlhL0NvbnRyb2xsZXJDbGllbnRJbnRlcmZhY2UuaCBiL21lZGlhL2xpYm1lZGlhdHJhbnNjb2RpbmcvaW5jbHVkZS9tZWRpYS9Db250cm9sbGVyQ2xpZW50SW50ZXJmYWNlLmgKaW5kZXggOTMxMWUyZS4uZWE2M2RhOCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWF0cmFuc2NvZGluZy9pbmNsdWRlL21lZGlhL0NvbnRyb2xsZXJDbGllbnRJbnRlcmZhY2UuaAorKysgYi9tZWRpYS9saWJtZWRpYXRyYW5zY29kaW5nL2luY2x1ZGUvbWVkaWEvQ29udHJvbGxlckNsaWVudEludGVyZmFjZS5oCkBAIC02Niw3ICs2Niw3IEBACiAgICAgICogUmV0dXJucyBmYWxzZSBpZiB0aGUgc2Vzc2lvbiBkb2Vzbid0IGV4aXN0LCBvciB0aGUgY2xpZW50IGlzIGFscmVhZHkgcmVxdWVzdGluZyB0aGUKICAgICAgKiBzZXNzaW9uLiBSZXR1cm5zIHRydWUgb3RoZXJ3aXNlLgogICAgICAqLwotICAgIHZpcnR1YWwgYm9vbCBhZGRDbGllbnRVaWQoQ2xpZW50SWRUeXBlIGNsaWVudElkLCBTZXNzaW9uSWRUeXBlIHNlc3Npb25JZCwgdWlkX3QgY2xpZW50VWlkKTsKKyAgICB2aXJ0dWFsIGJvb2wgYWRkQ2xpZW50VWlkKENsaWVudElkVHlwZSBjbGllbnRJZCwgU2Vzc2lvbklkVHlwZSBzZXNzaW9uSWQsIHVpZF90IGNsaWVudFVpZCkgPSAwOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSAodW5zb3J0ZWQpIGxpc3Qgb2YgYWxsIGNsaWVudHMgcmVxdWVzdGluZyB0aGUgc2Vzc2lvbiBpZGVudGlmaWVkIGJ5CkBAIC04MSw3ICs4MSw3IEBACiAgICAgICogUmV0dXJucyBmYWxzZSBpZiB0aGUgc2Vzc2lvbiBkb2Vzbid0IGV4aXN0LiBSZXR1cm5zIHRydWUgb3RoZXJ3aXNlLgogICAgICAqLwogICAgIHZpcnR1YWwgYm9vbCBnZXRDbGllbnRVaWRzKENsaWVudElkVHlwZSBjbGllbnRJZCwgU2Vzc2lvbklkVHlwZSBzZXNzaW9uSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8aW50MzJfdD4qIG91dF9jbGllbnRVaWRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxpbnQzMl90Piogb3V0X2NsaWVudFVpZHMpID0gMDsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkNvbnRyb2xsZXJDbGllbnRJbnRlcmZhY2UoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXRyYW5zY29kaW5nL3Rlc3RzL0FuZHJvaWQuYnAgYi9tZWRpYS9saWJtZWRpYXRyYW5zY29kaW5nL3Rlc3RzL0FuZHJvaWQuYnAKaW5kZXggNjAzNjExYS4uN2E2OTgwZiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWF0cmFuc2NvZGluZy90ZXN0cy9BbmRyb2lkLmJwCisrKyBiL21lZGlhL2xpYm1lZGlhdHJhbnNjb2RpbmcvdGVzdHMvQW5kcm9pZC5icApAQCAtMzEsNyArMzEsNyBAQAogICAgIF0sCiAKICAgICBzdGF0aWNfbGliczogWwotICAgICAgICAibWVkaWF0cmFuc2NvZGluZ19haWRsX2ludGVyZmFjZS1uZGtfcGxhdGZvcm0iLAorICAgICAgICAibWVkaWF0cmFuc2NvZGluZ19haWRsX2ludGVyZmFjZS1uZGsiLAogICAgICAgICAibGlibWVkaWF0cmFuc2NvZGluZyIsCiAgICAgXSwKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQUNvZGVjLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0FDb2RlYy5jcHAKaW5kZXggMWU2NDUzOC4uYTRmYmJiYyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQUNvZGVjLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9BQ29kZWMuY3BwCkBAIC0zMzA0LDEwICszMzA0LDEyIEBACiAgICAgaWYgKGVyciAhPSBPSykgewogICAgICAgICBBTE9HRSgibmF0aXZlX3dpbmRvd19zZXRfc2lkZWJhbmRfc3RyZWFtKCVwKSBmYWlsZWQhIChlcnIgJWQpLiIsCiAgICAgICAgICAgICAgICAgc2lkZWJhbmRIYW5kbGUsIGVycik7Ci0gICAgICAgIHJldHVybiBlcnI7CiAgICAgfQogCi0gICAgcmV0dXJuIE9LOworICAgIG5hdGl2ZV9oYW5kbGVfY2xvc2Uoc2lkZWJhbmRIYW5kbGUpOworICAgIG5hdGl2ZV9oYW5kbGVfZGVsZXRlKHNpZGViYW5kSGFuZGxlKTsKKworICAgIHJldHVybiBlcnI7CiB9CiAKIHN0YXR1c190IEFDb2RlYzo6c2V0VmlkZW9Qb3J0Rm9ybWF0VHlwZSgKQEAgLTU0MzEsNiArNTQzMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeS0+c2V0SW50MzIoImNoYW5uZWwtY291bnQiLCBwYXJhbXMubkNoYW5uZWxzKTsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5LT5zZXRJbnQzMigic2FtcGxlLXJhdGUiLCBwYXJhbXMublNhbXBsZVJhdGUpOwogICAgICAgICAgICAgICAgICAgICBub3RpZnktPnNldEludDMyKCJiaXRyYXRlIiwgcGFyYW1zLm5CaXRSYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgbm90aWZ5LT5zZXRJbnQzMigiYWFjLXByb2ZpbGUiLCBwYXJhbXMuZUFBQ1Byb2ZpbGUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTkyMDUsNCArOTIwOCwxOSBAQAogICAgIHJldHVybiBPSzsKIH0KIAorc3RhdHVzX3QgQUNvZGVjOjpxdWVyeVN1cHBvcnRlZFBhcmFtZXRlcnMoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICpuYW1lcykgeworICAgIGlmICghbmFtZXMpIHsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCitzdGF0dXNfdCBBQ29kZWM6OnN1YnNjcmliZVRvUGFyYW1ldGVycyhbW21heWJlX3VudXNlZF1dIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAmbmFtZXMpIHsKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXR1c190IEFDb2RlYzo6dW5zdWJzY3JpYmVGcm9tUGFyYW1ldGVycyhbW21heWJlX3VudXNlZF1dIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAmbmFtZXMpIHsKKyAgICByZXR1cm4gT0s7Cit9CisKIH0gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9BbmRyb2lkLmJwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQW5kcm9pZC5icAppbmRleCBhMDUyYTcwLi5lNDdlN2ZmIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9BbmRyb2lkLmJwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0FuZHJvaWQuYnAKQEAgLTEwOSw2ICsxMDksNyBAQAogCiAgICAgc3JjczogWwogICAgICAgICAiQ29kZWNCYXNlLmNwcCIsCisgICAgICAgICJEYXRhQ29udmVydGVyLmNwcCIsCiAgICAgICAgICJGcmFtZVJlbmRlclRyYWNrZXIuY3BwIiwKICAgICAgICAgIk1lZGlhQ29kZWNMaXN0V3JpdGVyLmNwcCIsCiAgICAgICAgICJTa2lwQ3V0QnVmZmVyLmNwcCIsCkBAIC0xMjUsNiArMTI2LDcgQEAKICAgICBdLAogCiAgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYmF1ZGlvdXRpbHMiLAogICAgICAgICAibGliZ3VpIiwKICAgICAgICAgImxpYmhpZGxhbGxvY2F0b3J1dGlscyIsCiAgICAgICAgICJsaWJsb2ciLApAQCAtMjY2LDcgKzI2OCw2IEBACiAgICAgICAgICJDYWxsYmFja01lZGlhU291cmNlLmNwcCIsCiAgICAgICAgICJDYW1lcmFTb3VyY2UuY3BwIiwKICAgICAgICAgIkNhbWVyYVNvdXJjZVRpbWVMYXBzZS5jcHAiLAotICAgICAgICAiRGF0YUNvbnZlcnRlci5jcHAiLAogICAgICAgICAiRnJhbWVEZWNvZGVyLmNwcCIsCiAgICAgICAgICJIZXZjVXRpbHMuY3BwIiwKICAgICAgICAgIkludGVyZmFjZVV0aWxzLmNwcCIsCkBAIC0zNDAsNiArMzQxLDcgQEAKICAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUubWVkaWEub214QDEuMCIsCiAgICAgICAgICJmcmFtZXdvcmstcGVybWlzc2lvbi1haWRsLWNwcCIsCiAgICAgICAgICJsaWJhdWRpb2NsaWVudF9haWRsX2NvbnZlcnNpb24iLAorICAgICAgICAicGFja2FnZW1hbmFnZXJfYWlkbC1jcHAiLAogICAgIF0sCiAKICAgICBzdGF0aWNfbGliczogWwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvRnJhbWVEZWNvZGVyLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0ZyYW1lRGVjb2Rlci5jcHAKaW5kZXggYTI0MWUyOS4uMDFjYjliMyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvRnJhbWVEZWNvZGVyLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9GcmFtZURlY29kZXIuY3BwCkBAIC0yNjIsMTMgKzI2MiwxMCBAQAogfQogCiBib29sIGlzSERSKGNvbnN0IHNwPEFNZXNzYWdlPiAmZm9ybWF0KSB7Ci0gICAgdWludDMyX3Qgc3RhbmRhcmQsIHJhbmdlLCB0cmFuc2ZlcjsKKyAgICB1aW50MzJfdCBzdGFuZGFyZCwgdHJhbnNmZXI7CiAgICAgaWYgKCFmb3JtYXQtPmZpbmRJbnQzMigiY29sb3Itc3RhbmRhcmQiLCAoaW50MzJfdCopJnN0YW5kYXJkKSkgewogICAgICAgICBzdGFuZGFyZCA9IDA7CiAgICAgfQotICAgIGlmICghZm9ybWF0LT5maW5kSW50MzIoImNvbG9yLXJhbmdlIiwgKGludDMyX3QqKSZyYW5nZSkpIHsKLSAgICAgICAgcmFuZ2UgPSAwOwotICAgIH0KICAgICBpZiAoIWZvcm1hdC0+ZmluZEludDMyKCJjb2xvci10cmFuc2ZlciIsIChpbnQzMl90KikmdHJhbnNmZXIpKSB7CiAgICAgICAgIHRyYW5zZmVyID0gMDsKICAgICB9CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9NZWRpYUNvZGVjLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01lZGlhQ29kZWMuY3BwCmluZGV4IGRhNTgxZmIuLjZiNWJhMTYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01lZGlhQ29kZWMuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01lZGlhQ29kZWMuY3BwCkBAIC0zMTg3LDggKzMxODcsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhbWV0cmljc19zZXRJbnQzMihtTWV0cmljc0hhbmRsZSwga0NvZGVjU2VjdXJlLCAwKTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlmIChtSXNWaWRlbykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXVkaW8gY29kZWMgaXMgY3VycmVudGx5IGlnbm9yZWQuCisgICAgICAgICAgICAgICAgICAgIE1lZGlhQ29kZWNJbmZvOjpBdHRyaWJ1dGVzIGF0dHIgPSBtQ29kZWNJbmZvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtQ29kZWNJbmZvLT5nZXRBdHRyaWJ1dGVzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE1lZGlhQ29kZWNJbmZvOjpBdHRyaWJ1dGVzKDApOworICAgICAgICAgICAgICAgICAgICBpZiAoIShhdHRyICYgTWVkaWFDb2RlY0luZm86OmtGbGFnSXNTb2Z0d2FyZU9ubHkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzb2Z0d2FyZSBjb2RlYyBpcyBjdXJyZW50bHkgaWdub3JlZC4KICAgICAgICAgICAgICAgICAgICAgICAgIG1SZXNvdXJjZU1hbmFnZXJQcm94eS0+YWRkUmVzb3VyY2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhUmVzb3VyY2U6OkNvZGVjUmVzb3VyY2UobUZsYWdzICYga0ZsYWdJc1NlY3VyZSwgbUlzVmlkZW8pKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzUwNCw2ICszNTA3LDIwIEBACiAKICAgICAgICAgICAgICAgICBjYXNlIGtXaGF0RHJhaW5UaGlzQnVmZmVyOgogICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChtRmxhZ3MgJiBrRmxhZ1VzZUJsb2NrTW9kZWwpID09IDAgJiYgbVR1bm5lbGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcDxSZWZCYXNlPiBvYmo7CisgICAgICAgICAgICAgICAgICAgICAgICBDSEVDSyhtc2ctPmZpbmRPYmplY3QoImJ1ZmZlciIsICZvYmopKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwPE1lZGlhQ29kZWNCdWZmZXI+IGJ1ZmZlciA9IHN0YXRpY19jYXN0PE1lZGlhQ29kZWNCdWZmZXIgKj4ob2JqLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtRmxhZ3MgJiBrRmxhZ0lzQXN5bmMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiBhc3luY2hyb25vdXMgbW9kZSwgb3V0cHV0IGZvcm1hdCBjaGFuZ2UgaXMgcHJvY2Vzc2VkIGltbWVkaWF0ZWx5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU91dHB1dEZvcm1hdENoYW5nZUlmTmVlZGVkKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RBY3Rpdml0eU5vdGlmaWNhdGlvbklmUG9zc2libGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1CdWZmZXJDaGFubmVsLT5kaXNjYXJkQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgIC8qIHNpemVfdCBpbmRleCA9ICovdXBkYXRlQnVmZmVycyhrUG9ydEluZGV4T3V0cHV0LCBtc2cpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChtU3RhdGUgPT0gRkxVU0hJTkcKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01lZGlhQ29kZWNMaXN0LmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01lZGlhQ29kZWNMaXN0LmNwcAppbmRleCA2MjQzODI4Li4yZmZlNzI4IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9NZWRpYUNvZGVjTGlzdC5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvTWVkaWFDb2RlY0xpc3QuY3BwCkBAIC01MDksNiArNTA5LDI5IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgaW50MzJfdCBwcm9maWxlID0gLTE7CisgICAgICAgIGlmIChmb3JtYXQtPmZpbmRJbnQzMigicHJvZmlsZSIsICZwcm9maWxlKSkgeworICAgICAgICAgICAgaW50MzJfdCBsZXZlbCA9IC0xOworICAgICAgICAgICAgZm9ybWF0LT5maW5kSW50MzIoImxldmVsIiwgJmxldmVsKTsKKyAgICAgICAgICAgIFZlY3RvcjxNZWRpYUNvZGVjSW5mbzo6UHJvZmlsZUxldmVsPiBwcm9maWxlTGV2ZWxzOworICAgICAgICAgICAgY2FwYWJpbGl0aWVzLT5nZXRTdXBwb3J0ZWRQcm9maWxlTGV2ZWxzKCZwcm9maWxlTGV2ZWxzKTsKKyAgICAgICAgICAgIGF1dG8gaXQgPSBwcm9maWxlTGV2ZWxzLmJlZ2luKCk7CisgICAgICAgICAgICBmb3IgKDsgaXQgIT0gcHJvZmlsZUxldmVscy5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlICE9IGl0LT5tUHJvZmlsZSkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGxldmVsID4gLTEgJiYgbGV2ZWwgPiBpdC0+bUxldmVsKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGl0ID09IHByb2ZpbGVMZXZlbHMuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBBTE9HVigiQ29kZWMgZG9lcyBub3Qgc3VwcG9ydCBwcm9maWxlICVkIHdpdGggbGV2ZWwgJWQiLCBwcm9maWxlLCBsZXZlbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gaGF2ZW4ndCBmb3VuZCBhIHJlYXNvbiB0byBkaXNjYXJkIHRoaXMgb25lCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9NZWRpYUNvZGVjU291cmNlLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01lZGlhQ29kZWNTb3VyY2UuY3BwCmluZGV4IDAxMDdjMzIuLmIwN2Y4ZjcgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01lZGlhQ29kZWNTb3VyY2UuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01lZGlhQ29kZWNTb3VyY2UuY3BwCkBAIC05NDMsMTAgKzk0MywxNyBAQAogCiAgICAgICAgICAgICBzcDxNZWRpYUNvZGVjQnVmZmVyPiBvdXRidWY7CiAgICAgICAgICAgICBzdGF0dXNfdCBlcnIgPSBtRW5jb2Rlci0+Z2V0T3V0cHV0QnVmZmVyKGluZGV4LCAmb3V0YnVmKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gT0sgfHwgb3V0YnVmID09IE5VTEwgfHwgb3V0YnVmLT5kYXRhKCkgPT0gTlVMTAotICAgICAgICAgICAgICAgIHx8IG91dGJ1Zi0+c2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gT0sgfHwgb3V0YnVmID09IE5VTEwgfHwgb3V0YnVmLT5kYXRhKCkgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHNpZ25hbEVPUygpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIGlmIChvdXRidWYtPnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gWmVybyBsZW5ndGggQ1NEIGJ1ZmZlcnMgYXJlIG5vdCB0cmVhdGVkIGFzIGFuIGVycm9yCisgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgTWVkaWFDb2RlYzo6QlVGRkVSX0ZMQUdfQ09ERUNDT05GSUcpIHsKKyAgICAgICAgICAgICAgICAgICAgbUVuY29kZXItPnJlbGVhc2VPdXRwdXRCdWZmZXIoaW5kZXgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNpZ25hbEVPUygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgTWVkaWFCdWZmZXJCYXNlICptYnVmID0gbmV3IE1lZGlhQnVmZmVyKG91dGJ1Zi0+c2l6ZSgpKTsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L1NraXBDdXRCdWZmZXIuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvU2tpcEN1dEJ1ZmZlci5jcHAKaW5kZXggZWU5MDE2ZC4uZGU5MTUzMyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvU2tpcEN1dEJ1ZmZlci5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvU2tpcEN1dEJ1ZmZlci5jcHAKQEAgLTE0NSw3ICsxNDUsMTkgQEAKICAgICBpZiAoYXZhaWxhYmxlIDwgbnVtKSB7CiAgICAgICAgIGludDMyX3QgbmV3Y2FwYWNpdHkgPSBtQ2FwYWNpdHkgKyAobnVtIC0gYXZhaWxhYmxlKTsKICAgICAgICAgY2hhciAqIG5ld2J1ZmZlciA9IG5ldyBjaGFyW25ld2NhcGFjaXR5XTsKLSAgICAgICAgbWVtY3B5KG5ld2J1ZmZlciwgbUN1dEJ1ZmZlciwgbUNhcGFjaXR5KTsKKyAgICAgICAgaWYgKG1Xcml0ZUhlYWQgPCBtUmVhZEhlYWQpIHsKKyAgICAgICAgICAgIC8vIGRhdGEgaXNuJ3QgY29udGludW91cywgbmVlZCB0byBtZW1jcHkgdHdpY2UKKyAgICAgICAgICAgIC8vIHRvIG1vdmUgcHJldmlvdXMgZGF0YSB0byBuZXcgYnVmZmVyLgorICAgICAgICAgICAgc2l6ZV90IGNvcHlMZWZ0ID0gbUNhcGFjaXR5IC0gbVJlYWRIZWFkOworICAgICAgICAgICAgbWVtY3B5KG5ld2J1ZmZlciwgbUN1dEJ1ZmZlciArIG1SZWFkSGVhZCwgY29weUxlZnQpOworICAgICAgICAgICAgbWVtY3B5KG5ld2J1ZmZlciArIGNvcHlMZWZ0LCBtQ3V0QnVmZmVyLCBtV3JpdGVIZWFkKTsKKyAgICAgICAgICAgIG1SZWFkSGVhZCA9IDA7CisgICAgICAgICAgICBtV3JpdGVIZWFkICs9IGNvcHlMZWZ0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWVtY3B5KG5ld2J1ZmZlciwgbUN1dEJ1ZmZlciArIG1SZWFkSGVhZCwgbVdyaXRlSGVhZCAtIG1SZWFkSGVhZCk7CisgICAgICAgICAgICBtV3JpdGVIZWFkIC09IG1SZWFkSGVhZDsKKyAgICAgICAgICAgIG1SZWFkSGVhZCA9IDA7CisgICAgICAgIH0KICAgICAgICAgZGVsZXRlIFtdIG1DdXRCdWZmZXI7CiAgICAgICAgIG1DYXBhY2l0eSA9IG5ld2NhcGFjaXR5OwogICAgICAgICBtQ3V0QnVmZmVyID0gbmV3YnVmZmVyOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvVEVTVF9NQVBQSU5HIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvVEVTVF9NQVBQSU5HCmluZGV4IDdjZTI5NjguLjdkNGUxNjggMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L1RFU1RfTUFQUElORworKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9URVNUX01BUFBJTkcKQEAgLTIwLDEzICsyMCwzNSBAQAogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgImV4Y2x1ZGUtYW5ub3RhdGlvbiI6ICJhbmRyb2lkLnBsYXRmb3JtLnRlc3QuYW5ub3RhdGlvbnMuUmVxdWlyZXNEZXZpY2UiCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIkN0c01lZGlhQXVkaW9UZXN0Q2FzZXMiLAorICAgICAgIm9wdGlvbnMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiaW5jbHVkZS1hbm5vdGF0aW9uIjogImFuZHJvaWQucGxhdGZvcm0udGVzdC5hbm5vdGF0aW9ucy5QcmVzdWJtaXQiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiZXhjbHVkZS1hbm5vdGF0aW9uIjogImFuZHJvaWQucGxhdGZvcm0udGVzdC5hbm5vdGF0aW9ucy5SZXF1aXJlc0RldmljZSIKICAgICAgICAgfSwKICAgICAgICAgLy8gVE9ETzogYi8xNDkzMTQ0MTkKICAgICAgICAgewotICAgICAgICAgICJleGNsdWRlLWZpbHRlciI6ICJhbmRyb2lkLm1lZGlhLmN0cy5BdWRpb1BsYXliYWNrQ2FwdHVyZVRlc3QiCisgICAgICAgICAgImV4Y2x1ZGUtZmlsdGVyIjogImFuZHJvaWQubWVkaWEuYXVkaW8uY3RzLkF1ZGlvUGxheWJhY2tDYXB0dXJlVGVzdCIKICAgICAgICAgfSwKICAgICAgICAgewotICAgICAgICAgICJleGNsdWRlLWZpbHRlciI6ICJhbmRyb2lkLm1lZGlhLmN0cy5BdWRpb1JlY29yZFRlc3QiCisgICAgICAgICAgImV4Y2x1ZGUtZmlsdGVyIjogImFuZHJvaWQubWVkaWEuYXVkaW8uY3RzLkF1ZGlvUmVjb3JkVGVzdCIKKyAgICAgICAgfQorICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiQ3RzTWVkaWFQbGF5ZXJUZXN0Q2FzZXMiLAorICAgICAgIm9wdGlvbnMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiaW5jbHVkZS1hbm5vdGF0aW9uIjogImFuZHJvaWQucGxhdGZvcm0udGVzdC5hbm5vdGF0aW9ucy5QcmVzdWJtaXQiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiZXhjbHVkZS1hbm5vdGF0aW9uIjogImFuZHJvaWQucGxhdGZvcm0udGVzdC5hbm5vdGF0aW9ucy5SZXF1aXJlc0RldmljZSIKICAgICAgICAgfQogICAgICAgXQogICAgIH0KZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L1V0aWxzLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L1V0aWxzLmNwcAppbmRleCA0YzE4Zjg3Li5hNmRmNWJiIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9VdGlscy5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvVXRpbHMuY3BwCkBAIC0xNzU5LDI0ICsxNzU5LDM5IEBACiAgICAgaWYgKG1pbWUuc3RhcnRzV2l0aCgidmlkZW8vIikgfHwgbWltZS5zdGFydHNXaXRoKCJpbWFnZS8iKSkgewogICAgICAgICBpbnQzMl90IHdpZHRoOwogICAgICAgICBpbnQzMl90IGhlaWdodDsKLSAgICAgICAgaWYgKG1zZy0+ZmluZEludDMyKCJ3aWR0aCIsICZ3aWR0aCkgJiYgbXNnLT5maW5kSW50MzIoImhlaWdodCIsICZoZWlnaHQpKSB7Ci0gICAgICAgICAgICBtZXRhLT5zZXRJbnQzMihrS2V5V2lkdGgsIHdpZHRoKTsKLSAgICAgICAgICAgIG1ldGEtPnNldEludDMyKGtLZXlIZWlnaHQsIGhlaWdodCk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghbXNnLT5maW5kSW50MzIoIndpZHRoIiwgJndpZHRoKSB8fCAhbXNnLT5maW5kSW50MzIoImhlaWdodCIsICZoZWlnaHQpKSB7CiAgICAgICAgICAgICBBTE9HVigiZGlkIG5vdCBmaW5kIHdpZHRoIGFuZC9vciBoZWlnaHQiKTsKICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApIHsKKyAgICAgICAgICAgIEFMT0dFKCJJbnZhbGlkIHZhbHVlIG9mIHdpZHRoOiAlZCBhbmQvb3IgaGVpZ2h0OiAlZCIsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICAgICAgfQorICAgICAgICBtZXRhLT5zZXRJbnQzMihrS2V5V2lkdGgsIHdpZHRoKTsKKyAgICAgICAgbWV0YS0+c2V0SW50MzIoa0tleUhlaWdodCwgaGVpZ2h0KTsKIAotICAgICAgICBpbnQzMl90IHNhcldpZHRoLCBzYXJIZWlnaHQ7Ci0gICAgICAgIGlmIChtc2ctPmZpbmRJbnQzMigic2FyLXdpZHRoIiwgJnNhcldpZHRoKQotICAgICAgICAgICAgICAgICYmIG1zZy0+ZmluZEludDMyKCJzYXItaGVpZ2h0IiwgJnNhckhlaWdodCkpIHsKKyAgICAgICAgaW50MzJfdCBzYXJXaWR0aCA9IC0xLCBzYXJIZWlnaHQgPSAtMTsKKyAgICAgICAgYm9vbCBmb3VuZFdpZHRoLCBmb3VuZEhlaWdodDsKKyAgICAgICAgZm91bmRXaWR0aCA9IG1zZy0+ZmluZEludDMyKCJzYXItd2lkdGgiLCAmc2FyV2lkdGgpOworICAgICAgICBmb3VuZEhlaWdodCA9IG1zZy0+ZmluZEludDMyKCJzYXItaGVpZ2h0IiwgJnNhckhlaWdodCk7CisgICAgICAgIGlmIChmb3VuZFdpZHRoIHx8IGZvdW5kSGVpZ2h0KSB7CisgICAgICAgICAgICBpZiAoc2FyV2lkdGggPD0gMCB8fCBzYXJIZWlnaHQgPD0gMCkgeworICAgICAgICAgICAgICAgIEFMT0dFKCJJbnZhbGlkIHZhbHVlIG9mIHNhcldpZHRoOiAlZCBhbmQvb3Igc2FySGVpZ2h0OiAlZCIsIHNhcldpZHRoLCBzYXJIZWlnaHQpOworICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtZXRhLT5zZXRJbnQzMihrS2V5U0FSV2lkdGgsIHNhcldpZHRoKTsKICAgICAgICAgICAgIG1ldGEtPnNldEludDMyKGtLZXlTQVJIZWlnaHQsIHNhckhlaWdodCk7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQzMl90IGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodDsKLSAgICAgICAgaWYgKG1zZy0+ZmluZEludDMyKCJkaXNwbGF5LXdpZHRoIiwgJmRpc3BsYXlXaWR0aCkKLSAgICAgICAgICAgICAgICAmJiBtc2ctPmZpbmRJbnQzMigiZGlzcGxheS1oZWlnaHQiLCAmZGlzcGxheUhlaWdodCkpIHsKKyAgICAgICAgaW50MzJfdCBkaXNwbGF5V2lkdGggPSAtMSwgZGlzcGxheUhlaWdodCA9IC0xOworICAgICAgICBmb3VuZFdpZHRoID0gbXNnLT5maW5kSW50MzIoImRpc3BsYXktd2lkdGgiLCAmZGlzcGxheVdpZHRoKTsKKyAgICAgICAgZm91bmRIZWlnaHQgPSBtc2ctPmZpbmRJbnQzMigiZGlzcGxheS1oZWlnaHQiLCAmZGlzcGxheUhlaWdodCk7CisgICAgICAgIGlmIChmb3VuZFdpZHRoIHx8IGZvdW5kSGVpZ2h0KSB7CisgICAgICAgICAgICBpZiAoZGlzcGxheVdpZHRoIDw9IDAgfHwgZGlzcGxheUhlaWdodCA8PSAwKSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIkludmFsaWQgdmFsdWUgb2YgZGlzcGxheVdpZHRoOiAlZCBhbmQvb3IgZGlzcGxheUhlaWdodDogJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbWV0YS0+c2V0SW50MzIoa0tleURpc3BsYXlXaWR0aCwgZGlzcGxheVdpZHRoKTsKICAgICAgICAgICAgIG1ldGEtPnNldEludDMyKGtLZXlEaXNwbGF5SGVpZ2h0LCBkaXNwbGF5SGVpZ2h0KTsKICAgICAgICAgfQpAQCAtMTc4NiwxNyArMTgwMSwyOSBAQAogICAgICAgICAgICAgaWYgKG1zZy0+ZmluZEludDMyKCJpcy1kZWZhdWx0IiwgJmlzUHJpbWFyeSkgJiYgaXNQcmltYXJ5KSB7CiAgICAgICAgICAgICAgICAgbWV0YS0+c2V0SW50MzIoa0tleVRyYWNrSXNEZWZhdWx0LCAxKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludDMyX3QgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0LCBncmlkUm93cywgZ3JpZENvbHM7Ci0gICAgICAgICAgICBpZiAobXNnLT5maW5kSW50MzIoInRpbGUtd2lkdGgiLCAmdGlsZVdpZHRoKSkgeworICAgICAgICAgICAgaW50MzJfdCB0aWxlV2lkdGggPSAtMSwgdGlsZUhlaWdodCA9IC0xOworICAgICAgICAgICAgZm91bmRXaWR0aCA9IG1zZy0+ZmluZEludDMyKCJ0aWxlLXdpZHRoIiwgJnRpbGVXaWR0aCk7CisgICAgICAgICAgICBmb3VuZEhlaWdodCA9IG1zZy0+ZmluZEludDMyKCJ0aWxlLWhlaWdodCIsICZ0aWxlSGVpZ2h0KTsKKyAgICAgICAgICAgIGlmIChmb3VuZFdpZHRoIHx8IGZvdW5kSGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgaWYgKHRpbGVXaWR0aCA8PSAwIHx8IHRpbGVIZWlnaHQgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICBBTE9HRSgiSW52YWxpZCB2YWx1ZSBvZiB0aWxlV2lkdGg6ICVkIGFuZC9vciB0aWxlSGVpZ2h0OiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbWV0YS0+c2V0SW50MzIoa0tleVRpbGVXaWR0aCwgdGlsZVdpZHRoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtc2ctPmZpbmRJbnQzMigidGlsZS1oZWlnaHQiLCAmdGlsZUhlaWdodCkpIHsKICAgICAgICAgICAgICAgICBtZXRhLT5zZXRJbnQzMihrS2V5VGlsZUhlaWdodCwgdGlsZUhlaWdodCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobXNnLT5maW5kSW50MzIoImdyaWQtcm93cyIsICZncmlkUm93cykpIHsKKyAgICAgICAgICAgIGludDMyX3QgZ3JpZFJvd3MgPSAtMSwgZ3JpZENvbHMgPSAtMTsKKyAgICAgICAgICAgIGJvb2wgZm91bmRSb3dzLCBmb3VuZENvbHM7CisgICAgICAgICAgICBmb3VuZFJvd3MgPSBtc2ctPmZpbmRJbnQzMigiZ3JpZC1yb3dzIiwgJmdyaWRSb3dzKTsKKyAgICAgICAgICAgIGZvdW5kQ29scyA9IG1zZy0+ZmluZEludDMyKCJncmlkLWNvbHMiLCAmZ3JpZENvbHMpOworICAgICAgICAgICAgaWYgKGZvdW5kUm93cyB8fCBmb3VuZENvbHMpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3JpZFJvd3MgPD0gMCB8fCBncmlkQ29scyA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJJbnZhbGlkIHZhbHVlIG9mIGdyaWRSb3dzOiAlZCBhbmQvb3IgZ3JpZENvbHM6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkUm93cywgZ3JpZENvbHMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBtZXRhLT5zZXRJbnQzMihrS2V5R3JpZFJvd3MsIGdyaWRSb3dzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtc2ctPmZpbmRJbnQzMigiZ3JpZC1jb2xzIiwgJmdyaWRDb2xzKSkgewogICAgICAgICAgICAgICAgIG1ldGEtPnNldEludDMyKGtLZXlHcmlkQ29scywgZ3JpZENvbHMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xODEyLDYgKzE4MzksMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNyb3BUb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcm9wUmlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcm9wQm90dG9tKSkgeworICAgICAgICAgICAgaWYgKGNyb3BMZWZ0IDwgMCB8fCBjcm9wTGVmdCA+IGNyb3BSaWdodCB8fCBjcm9wUmlnaHQgPj0gd2lkdGgpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiSW52YWxpZCB2YWx1ZSBvZiBjcm9wTGVmdDogJWQgYW5kL29yIGNyb3BSaWdodDogJWQiLCBjcm9wTGVmdCwgY3JvcFJpZ2h0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNyb3BUb3AgPCAwIHx8IGNyb3BUb3AgPiBjcm9wQm90dG9tIHx8IGNyb3BCb3R0b20gPj0gaGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgQUxPR0UoIkludmFsaWQgdmFsdWUgb2YgY3JvcFRvcDogJWQgYW5kL29yIGNyb3BCb3R0b206ICVkIiwgY3JvcFRvcCwgY3JvcEJvdHRvbSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1ldGEtPnNldFJlY3Qoa0tleUNyb3BSZWN0LCBjcm9wTGVmdCwgY3JvcFRvcCwgY3JvcFJpZ2h0LCBjcm9wQm90dG9tKTsKICAgICAgICAgfQogCkBAIC0xODU1LDkgKzE4OTAsMTYgQEAKICAgICAgICAgICAgIEFMT0dWKCJkaWQgbm90IGZpbmQgY2hhbm5lbC1jb3VudCBhbmQvb3Igc2FtcGxlLXJhdGUiKTsKICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgICAgIH0KKyAgICAgICAgLy8gY2hhbm5lbCBjb3VudCBjYW4gYmUgemVybyBpbiBzb21lIGNhc2VzIGxpa2UgbXBlZyBoCisgICAgICAgIGlmIChzYW1wbGVSYXRlIDw9IDAgfHwgbnVtQ2hhbm5lbHMgPCAwKSB7CisgICAgICAgICAgICBBTE9HRSgiSW52YWxpZCB2YWx1ZSBvZiBjaGFubmVsLWNvdW50OiAlZCBhbmQvb3Igc2FtcGxlLXJhdGU6ICVkIiwKKyAgICAgICAgICAgICAgICAgICBudW1DaGFubmVscywgc2FtcGxlUmF0ZSk7CisgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICB9CiAgICAgICAgIG1ldGEtPnNldEludDMyKGtLZXlDaGFubmVsQ291bnQsIG51bUNoYW5uZWxzKTsKICAgICAgICAgbWV0YS0+c2V0SW50MzIoa0tleVNhbXBsZVJhdGUsIHNhbXBsZVJhdGUpOwogICAgICAgICBpbnQzMl90IGJpdHNQZXJTYW1wbGU7CisgICAgICAgIC8vIFRPRE86KGIvMjA0NDMwOTUyKSBhZGQgYXBwcm9wcmlhdGUgYm91bmQgY2hlY2sgZm9yIGJpdHNQZXJTYW1wbGUKICAgICAgICAgaWYgKG1zZy0+ZmluZEludDMyKCJiaXRzLXBlci1zYW1wbGUiLCAmYml0c1BlclNhbXBsZSkpIHsKICAgICAgICAgICAgIG1ldGEtPnNldEludDMyKGtLZXlCaXRzUGVyU2FtcGxlLCBiaXRzUGVyU2FtcGxlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL200dl9oMjYzL2VuYy9Tb2Z0TVBFRzRFbmNvZGVyLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tNHZfaDI2My9lbmMvU29mdE1QRUc0RW5jb2Rlci5jcHAKaW5kZXggZmI2YzRlMi4uYmIxY2IwYiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL200dl9oMjYzL2VuYy9Tb2Z0TVBFRzRFbmNvZGVyLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvbTR2X2gyNjMvZW5jL1NvZnRNUEVHNEVuY29kZXIuY3BwCkBAIC0zNTQsNyArMzU0LDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG1wZWc0dHlwZS0+ZVByb2ZpbGUgIT0gT01YX1ZJREVPX01QRUc0UHJvZmlsZUNvcmUgfHwKLSAgICAgICAgICAgICAgICBtcGVnNHR5cGUtPmVMZXZlbCAhPSBPTVhfVklERU9fTVBFRzRMZXZlbDIgfHwKKyAgICAgICAgICAgICAgICBtcGVnNHR5cGUtPmVMZXZlbCA+IE9NWF9WSURFT19NUEVHNExldmVsMiB8fAogICAgICAgICAgICAgICAgIChtcGVnNHR5cGUtPm5BbGxvd2VkUGljdHVyZVR5cGVzICYgT01YX1ZJREVPX1BpY3R1cmVUeXBlQikgfHwKICAgICAgICAgICAgICAgICBtcGVnNHR5cGUtPm5CRnJhbWVzICE9IDAgfHwKICAgICAgICAgICAgICAgICBtcGVnNHR5cGUtPm5JRENWTENUaHJlc2hvbGQgIT0gMCB8fApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvQW5kcm9pZC5icCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL0FuZHJvaWQuYnAKaW5kZXggMGIwYWNiZi4uN2FjZjczNSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvQW5kcm9pZC5icAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9BbmRyb2lkLmJwCkBAIC0yOSw3ICsyOSw2IEBACiAgICAgXSwKIAogICAgIGluY2x1ZGVfZGlyczogWwotICAgICAgICAiZnJhbWV3b3Jrcy9hdi9tZWRpYS9saWJzdGFnZWZyaWdodCIsCiAgICAgICAgICJmcmFtZXdvcmtzL25hdGl2ZS9pbmNsdWRlL21lZGlhL29wZW5tYXgiLAogICAgIF0sCiAKQEAgLTY1LDYgKzY0LDggQEAKIAogICAgIGhlYWRlcl9saWJzOiBbCiAgICAgICAgICJsaWJiYXNlX2hlYWRlcnMiLAorICAgICAgICAibGlic3RhZ2VmcmlnaHRfaGVhZGVycyIsCisgICAgICAgICJsaWJzdGFnZWZyaWdodF9odHRwbGl2ZV9oZWFkZXJzIiwKICAgICBdLAogCiAgICAgc3RhdGljX2xpYnM6IFsKQEAgLTc0LDMgKzc1LDggQEAKICAgICBdLAogCiB9CisKK2NjX2xpYnJhcnlfaGVhZGVycyB7CisgICAgbmFtZTogImxpYnN0YWdlZnJpZ2h0X2h0dHBsaXZlX2hlYWRlcnMiLAorICAgIGV4cG9ydF9pbmNsdWRlX2RpcnM6IFsiLiJdLAorfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvTGl2ZVNlc3Npb24uY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvTGl2ZVNlc3Npb24uY3BwCmluZGV4IDNiYWQwMTUuLjBkN2NhZGQgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL0xpdmVTZXNzaW9uLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9MaXZlU2Vzc2lvbi5jcHAKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJNM1VQYXJzZXIuaCIKICNpbmNsdWRlICJQbGF5bGlzdEZldGNoZXIuaCIKIAotI2luY2x1ZGUgIm1wZWcydHMvQW5vdGhlclBhY2tldFNvdXJjZS5oIgorI2luY2x1ZGUgPEFub3RoZXJQYWNrZXRTb3VyY2UuaD4KIAogI2luY2x1ZGUgPGN1dGlscy9wcm9wZXJ0aWVzLmg+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+aWQoKSk7CisgICAgbUxpdmVMb29wZXItPnN0b3AoKTsKKyAgfQorICBtTGl2ZVNlc3Npb24uY2xlYXIoKTsKKyAgbUxpdmVMb29wZXIuY2xlYXIoKTsKK30KKwordm9pZCBIdHRwTGl2ZUZ1enplcjo6c2lnbmFsRW9zKCkgeworICBtRW9zUmVhY2hlZCA9IHRydWU7CisgIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gd2FpdEZvckRvd25sb2FkQ29tcGxldGUobURvd25sb2FkQ29tcGxldGVNdXRleCk7CisgIH0KKyAgbUNvbmRpdGlvbmFsVmFyaWFibGUubm90aWZ5X29uZSgpOworICByZXR1cm47Cit9CisKK2V4dGVybiAiQyIgaW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgSHR0cExpdmVGdXp6ZXIgaHR0cGxpdmVGdXp6ZXI7CisgIGh0dHBsaXZlRnV6emVyLnByb2Nlc3MoZGF0YSwgc2l6ZSk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvZnV6emVyL2h0dHBsaXZlX2Z1enplci5kaWN0IGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvZnV6emVyL2h0dHBsaXZlX2Z1enplci5kaWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwM2NjN2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9mdXp6ZXIvaHR0cGxpdmVfZnV6emVyLmRpY3QKQEAgLTAsMCArMSwxNSBAQAorI20zdTgtVGFncwora3cxPSIjRVhUTTNVIgora3cyPSIjRVhULVgtVkVSU0lPTjoiCitrdzM9IiNFWFQtWC1UQVJHRVREVVJBVElPTjoiCitrdzQ9IiNFWFQtWC1QTEFZTElTVC1UWVBFOiIKK2t3NT0iI0VYVElORjoiCitrdzY9IiNFWFQtWC1FTkRMSVNUIgora3c3PSIjRVhULVgtTUVESUEtU0VRVUVOQ0U6Igora3c4PSIjRVhULVgtS0VZOk1FVEhPRD1OT05FIgora3c5PSIjRVhULVgtRElTQ09OVElOVUlUWToiCitrdzEwPSIjRVhULVgtRElTQ09OVElOVUlUWS1TRVFVRU5DRTowIgora3cxMT0iI0VYVC1YLVNUUkVBTS1JTkY6QkFORFdJRFRIPSIKK2t3MTI9IiNFWFQtWC1TVFJFQU0tSU5GOkNPREVDUz0iCitrdzEzPSIjRVhULVgtQllURVJBTkdFOiIKK2t3MTQ9IiNFWFQtWC1NRURJQSIKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvQUNvZGVjLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L0FDb2RlYy5oCmluZGV4IGM4NGNjMTAuLjYzMmIzMmMgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvQUNvZGVjLmgKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9BQ29kZWMuaApAQCAtNzEsNiArNzEsOSBAQAogICAgIHZpcnR1YWwgdm9pZCBpbml0aWF0ZVNldElucHV0U3VyZmFjZShjb25zdCBzcDxQZXJzaXN0ZW50U3VyZmFjZT4gJnN1cmZhY2UpOwogICAgIHZpcnR1YWwgdm9pZCBpbml0aWF0ZVN0YXJ0KCk7CiAgICAgdmlydHVhbCB2b2lkIGluaXRpYXRlU2h1dGRvd24oYm9vbCBrZWVwQ29tcG9uZW50QWxsb2NhdGVkID0gZmFsc2UpOworICAgIHZpcnR1YWwgc3RhdHVzX3QgcXVlcnlTdXBwb3J0ZWRQYXJhbWV0ZXJzKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAqbmFtZXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgc3RhdHVzX3Qgc3Vic2NyaWJlVG9QYXJhbWV0ZXJzKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAmbmFtZXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgc3RhdHVzX3QgdW5zdWJzY3JpYmVGcm9tUGFyYW1ldGVycyhjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJm5hbWVzKSBvdmVycmlkZTsKIAogICAgIHN0YXR1c190IHF1ZXJ5Q2FwYWJpbGl0aWVzKAogICAgICAgICAgICAgY29uc3QgY2hhciogb3duZXIsIGNvbnN0IGNoYXIqIG5hbWUsCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L01lZGlhQnVmZmVyLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L01lZGlhQnVmZmVyLmgKaW5kZXggMmMwM2YyNy4uZjA3MGFhYyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9NZWRpYUJ1ZmZlci5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFCdWZmZXIuaApAQCAtMTA1LDcgKzEwNSw2IEBACiAgICAgICAgIGlmIChtTWVtb3J5LmdldCgpID09IG51bGxwdHIgfHwgbU1lbW9yeS0+dW5zZWN1cmVQb2ludGVyKCkgPT0gbnVsbHB0cikgcmV0dXJuIDA7CiAgICAgICAgIGludDMyX3QgcmVtb3RlUmVmY291bnQgPQogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8U2hhcmVkQ29udHJvbCAqPihtTWVtb3J5LT51bnNlY3VyZVBvaW50ZXIoKSktPmdldFJlbW90ZVJlZmNvdW50KCk7Ci0gICAgICAgIC8vIFNhbml0eSBjaGVjayBzbyB0aGF0IHJlbW90ZVJlZkNvdW50KCkgaXMgbm9uLW5lZ2F0aXZlLgogICAgICAgICByZXR1cm4gcmVtb3RlUmVmY291bnQgPj0gMCA/IHJlbW90ZVJlZmNvdW50IDogMDsgLy8gZG8gbm90IGFsbG93IGNvcnJ1cHRlZCBkYXRhLgogI2Vsc2UKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L01lZGlhQ29kZWNDb25zdGFudHMuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFDb2RlY0NvbnN0YW50cy5oCmluZGV4IDQyMzdlOGMuLjNhMDE5MjUgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFDb2RlY0NvbnN0YW50cy5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFDb2RlY0NvbnN0YW50cy5oCkBAIC0zNjQsNyArMzY0LDcgQEAKIGlubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmdfQVYxUHJvZmlsZShpbnQzMl90IGksIGNvbnN0IGNoYXIgKmRlZiA9ICI/PyIpIHsKICAgICBzd2l0Y2ggKGkpIHsKICAgICAgICAgY2FzZSBBVjFQcm9maWxlTWFpbjg6ICAgICAgICAgICByZXR1cm4gIk1haW44IjsKLSAgICAgICAgY2FzZSBBVjFQcm9maWxlTWFpbjEwOiAgICAgICAgICByZXR1cm4gIk1haW4xMEhEUiI7CisgICAgICAgIGNhc2UgQVYxUHJvZmlsZU1haW4xMDogICAgICAgICAgcmV0dXJuICJNYWluMTAiOwogICAgICAgICBjYXNlIEFWMVByb2ZpbGVNYWluMTBIRFIxMDogICAgIHJldHVybiAiTWFpbjEwSERSMTAiOwogICAgICAgICBjYXNlIEFWMVByb2ZpbGVNYWluMTBIRFIxMFBsdXM6IHJldHVybiAiTWFpbjEwSERSUGx1cyI7CiAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3Rlc3RzL2Z1enplcnMvQW5kcm9pZC5icCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3Rlc3RzL2Z1enplcnMvQW5kcm9pZC5icAppbmRleCAwMDk3ODMwLi5lYTE3YTRkIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC90ZXN0cy9mdXp6ZXJzL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvdGVzdHMvZnV6emVycy9BbmRyb2lkLmJwCkBAIC04Niw5ICs4Niw2IEBACiAgICAgZGljdGlvbmFyeTogImRpY3Rpb25hcmllcy9mb3JtYXRzLmRpY3QiLAogICAgIGRlZmF1bHRzOiBbImxpYnN0YWdlZnJpZ2h0X2Z1enplcl9kZWZhdWx0cyJdLAogICAgIHN0YXRpY19saWJzOiBbCi0gICAgICAgICJsaWJzdGFnZWZyaWdodF93ZWJtIiwKICAgICAgICAgImxpYmRhdGFzb3VyY2UiLAotICAgICAgICAibGlic3RhZ2VmcmlnaHRfZXNkcyIsCi0gICAgICAgICJsaWJvZ2ciLAogICAgIF0sCiB9CmRpZmYgLS1naXQgYS9tZWRpYS9tdHAvT1dORVJTIGIvbWVkaWEvbXRwL09XTkVSUwppbmRleCAxOTI4YmE4Li41NGQzZDRhIDEwMDY0NAotLS0gYS9tZWRpYS9tdHAvT1dORVJTCisrKyBiL21lZGlhL210cC9PV05FUlMKQEAgLTEsNiArMSw1IEBACiBzZXQgbm9wYXJlbnQKIAotbWFyY29uZUBnb29nbGUuY29tCiBqc2hhcmtleUBhbmRyb2lkLmNvbQogamFtZXN3ZWlAZ29vZ2xlLmNvbQogcm1vanVtZGVyQGdvb2dsZS5jb20KZGlmZiAtLWdpdCBhL21lZGlhL25kay9OZGtNZWRpYUNvZGVjLmNwcCBiL21lZGlhL25kay9OZGtNZWRpYUNvZGVjLmNwcAppbmRleCAxYWUyYjQ0Li4wZTJkZTRlIDEwMDY0NAotLS0gYS9tZWRpYS9uZGsvTmRrTWVkaWFDb2RlYy5jcHAKKysrIGIvbWVkaWEvbmRrL05ka01lZGlhQ29kZWMuY3BwCkBAIC00NTIsMTcgKzQ1MiwxOSBAQAogICAgICAgICB1aW50MzJfdCBmbGFncykgewogICAgIHNwPEFNZXNzYWdlPiBuYXRpdmVGb3JtYXQ7CiAgICAgQU1lZGlhRm9ybWF0X2dldEZvcm1hdChmb3JtYXQsICZuYXRpdmVGb3JtYXQpOwotICAgIEFMT0dWKCJjb25maWd1cmUgd2l0aCBmb3JtYXQ6ICVzIiwgbmF0aXZlRm9ybWF0LT5kZWJ1Z1N0cmluZygwKS5jX3N0cigpKTsKKyAgICAvLyBjcmVhdGUgb3VyIHNoYWxsb3cgY29weSwgc28gd2UgYXJlbid0IHZpY3RpbSB0byBhbnkgbGF0ZXIgY2hhbmdlcy4KKyAgICBzcDxBTWVzc2FnZT4gZHVwTmF0aXZlRm9ybWF0ID0gbmF0aXZlRm9ybWF0LT5kdXAoKTsKKyAgICBBTE9HVigiY29uZmlndXJlIHdpdGggZm9ybWF0OiAlcyIsIGR1cE5hdGl2ZUZvcm1hdC0+ZGVidWdTdHJpbmcoMCkuY19zdHIoKSk7CiAgICAgc3A8U3VyZmFjZT4gc3VyZmFjZSA9IE5VTEw7CiAgICAgaWYgKHdpbmRvdyAhPSBOVUxMKSB7CiAgICAgICAgIHN1cmZhY2UgPSAoU3VyZmFjZSopIHdpbmRvdzsKICAgICB9CiAKLSAgICBzdGF0dXNfdCBlcnIgPSBtRGF0YS0+bUNvZGVjLT5jb25maWd1cmUobmF0aXZlRm9ybWF0LCBzdXJmYWNlLAorICAgIHN0YXR1c190IGVyciA9IG1EYXRhLT5tQ29kZWMtPmNvbmZpZ3VyZShkdXBOYXRpdmVGb3JtYXQsIHN1cmZhY2UsCiAgICAgICAgICAgICBjcnlwdG8gPyBjcnlwdG8tPm1DcnlwdG8gOiBOVUxMLCBmbGFncyk7CiAgICAgaWYgKGVyciAhPSBPSykgewogICAgICAgICBBTE9HRSgiY29uZmlndXJlOiBlcnIoJWQpLCBmYWlsZWQgd2l0aCBmb3JtYXQ6ICVzIiwKLSAgICAgICAgICAgICAgZXJyLCBuYXRpdmVGb3JtYXQtPmRlYnVnU3RyaW5nKDApLmNfc3RyKCkpOworICAgICAgICAgICAgICBlcnIsIGR1cE5hdGl2ZUZvcm1hdC0+ZGVidWdTdHJpbmcoMCkuY19zdHIoKSk7CiAgICAgfQogICAgIHJldHVybiB0cmFuc2xhdGVfZXJyb3IoZXJyKTsKIH0KZGlmZiAtLWdpdCBhL21lZGlhL25kay9PV05FUlMgYi9tZWRpYS9uZGsvT1dORVJTCmluZGV4IDlkYzQ0MWUuLjgzNjQ0ZjAgMTAwNjQ0Ci0tLSBhL21lZGlhL25kay9PV05FUlMKKysrIGIvbWVkaWEvbmRrL09XTkVSUwpAQCAtMSwzICsxLDQgQEAKLW1hcmNvbmVAZ29vZ2xlLmNvbQorZXNzaWNrQGdvb2dsZS5jb20KK2xham9zQGdvb2dsZS5jb20KICMgRm9yIEFJbWFnZS9BSW1hZ2VSZWFkZXIKIGluY2x1ZGUgcGxhdGZvcm0vZnJhbWV3b3Jrcy9hdjovY2FtZXJhL09XTkVSUwpkaWZmIC0tZ2l0IGEvbWVkaWEvdGVzdHMvU2FtcGxlVmlkZW9FbmNvZGVyL2FwcC9zcmMvbWFpbi9BbmRyb2lkTWFuaWZlc3QueG1sIGIvbWVkaWEvdGVzdHMvU2FtcGxlVmlkZW9FbmNvZGVyL2FwcC9zcmMvbWFpbi9BbmRyb2lkTWFuaWZlc3QueG1sCmluZGV4IGIxNzU0MWQuLjc1ZDczYmYgMTAwNjQ0Ci0tLSBhL21lZGlhL3Rlc3RzL1NhbXBsZVZpZGVvRW5jb2Rlci9hcHAvc3JjL21haW4vQW5kcm9pZE1hbmlmZXN0LnhtbAorKysgYi9tZWRpYS90ZXN0cy9TYW1wbGVWaWRlb0VuY29kZXIvYXBwL3NyYy9tYWluL0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTMwLDcgKzMwLDggQEAKICAgICAgICAgYW5kcm9pZDpyb3VuZEljb249IkBtaXBtYXAvaWNfbGF1bmNoZXJfcm91bmQiCiAgICAgICAgIGFuZHJvaWQ6c3VwcG9ydHNSdGw9InRydWUiCiAgICAgICAgIGFuZHJvaWQ6dGhlbWU9IkBzdHlsZS9BcHBUaGVtZSI+Ci0gICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9ImNvbS5hbmRyb2lkLm1lZGlhLnNhbXBsZXZpZGVvZW5jb2Rlci5NYWluQWN0aXZpdHkiPgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJjb20uYW5kcm9pZC5tZWRpYS5zYW1wbGV2aWRlb2VuY29kZXIuTWFpbkFjdGl2aXR5IgorICAgICAgICAgICAgYW5kcm9pZDpleHBvcnRlZD0idHJ1ZSI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CiAgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVIiIC8+CkBAIC00Miw0ICs0Myw0IEBACiAgICAgICAgIGFuZHJvaWQ6dGFyZ2V0UGFja2FnZT0iY29tLmFuZHJvaWQubWVkaWEuc2FtcGxldmlkZW9lbmNvZGVyIgogICAgICAgICBhbmRyb2lkOmxhYmVsPSJTYW1wbGVWaWRlb0VuY29kZXIgVGVzdCIvPgogCi08L21hbmlmZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvbWFuaWZlc3Q+CmRpZmYgLS1naXQgYS9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvTWVkaWFCZW5jaG1hcmtUZXN0L0FuZHJvaWQuYnAgYi9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvTWVkaWFCZW5jaG1hcmtUZXN0L0FuZHJvaWQuYnAKaW5kZXggMmUwNmRhNS4uNGI0NGRjZiAxMDA2NDQKLS0tIGEvbWVkaWEvdGVzdHMvYmVuY2htYXJrL01lZGlhQmVuY2htYXJrVGVzdC9BbmRyb2lkLmJwCisrKyBiL21lZGlhL3Rlc3RzL2JlbmNobWFyay9NZWRpYUJlbmNobWFya1Rlc3QvQW5kcm9pZC5icApAQCAtNjksNyArNjksNiBAQAogamF2YV9kZWZhdWx0cyB7CiAgICAgbmFtZTogIk1lZGlhQmVuY2htYXJrLWRlZmF1bHRzIiwKIAotICAgIHNka192ZXJzaW9uOiAic3lzdGVtX2N1cnJlbnQiLAogICAgIG1pbl9zZGtfdmVyc2lvbjogIjI4IiwKLSAgICB0YXJnZXRfc2RrX3ZlcnNpb246ICIyOSIsCisgICAgdGFyZ2V0X3Nka192ZXJzaW9uOiAiMzAiLAogfQpkaWZmIC0tZ2l0IGEvbWVkaWEvdGVzdHMvYmVuY2htYXJrL01lZGlhQmVuY2htYXJrVGVzdC9idWlsZC5ncmFkbGUgYi9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvTWVkaWFCZW5jaG1hcmtUZXN0L2J1aWxkLmdyYWRsZQppbmRleCBiMmFlZTFhLi5iMjIyZDQ3IDEwMDY0NAotLS0gYS9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvTWVkaWFCZW5jaG1hcmtUZXN0L2J1aWxkLmdyYWRsZQorKysgYi9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvTWVkaWFCZW5jaG1hcmtUZXN0L2J1aWxkLmdyYWRsZQpAQCAtMTcsMjEgKzE3LDIxIEBACiBidWlsZHNjcmlwdCB7CiAgICAgcmVwb3NpdG9yaWVzIHsKICAgICAgICAgZ29vZ2xlKCkKLSAgICAgICAgamNlbnRlcigpCisgICAgICAgIG1hdmVuQ2VudHJhbCgpCiAgICAgfQogICAgIGRlcGVuZGVuY2llcyB7Ci0gICAgICAgIGNsYXNzcGF0aCAnY29tLmFuZHJvaWQudG9vbHMuYnVpbGQ6Z3JhZGxlOjMuNS4wJworICAgICAgICBjbGFzc3BhdGggJ2NvbS5hbmRyb2lkLnRvb2xzLmJ1aWxkOmdyYWRsZTo0LjIuMScKICAgICB9CiB9CiAKIGFwcGx5IHBsdWdpbjogJ2NvbS5hbmRyb2lkLmFwcGxpY2F0aW9uJwogCiBhbmRyb2lkIHsKLSAgICBjb21waWxlU2RrVmVyc2lvbiAyOQorICAgIGNvbXBpbGVTZGtWZXJzaW9uIDMwCiAgICAgZGVmYXVsdENvbmZpZyB7CiAgICAgICAgIGFwcGxpY2F0aW9uSWQgImNvbS5hbmRyb2lkLm1lZGlhLmJlbmNobWFyayIKICAgICAgICAgbWluU2RrVmVyc2lvbiAyOAotICAgICAgICB0YXJnZXRTZGtWZXJzaW9uIDI5CisgICAgICAgIHRhcmdldFNka1ZlcnNpb24gMzAKICAgICAgICAgdmVyc2lvbkNvZGUgMQogICAgICAgICB2ZXJzaW9uTmFtZSAiMS4wIgogICAgICAgICB0ZXN0SW5zdHJ1bWVudGF0aW9uUnVubmVyICJhbmRyb2lkeC50ZXN0LnJ1bm5lci5BbmRyb2lkSlVuaXRSdW5uZXIiCkBAIC01NywyMCArNTcsMjAgQEAKICAgICBleHRlcm5hbE5hdGl2ZUJ1aWxkIHsKICAgICAgICAgY21ha2UgewogICAgICAgICAgICAgcGF0aCAic3JjL21haW4vY3BwL0NNYWtlTGlzdHMudHh0IgotICAgICAgICAgICAgdmVyc2lvbiAiMy4xMC4yIgorICAgICAgICAgICAgdmVyc2lvbiAiMy4xOC4xIgogICAgICAgICB9CiAgICAgfQogfQogCiByZXBvc2l0b3JpZXMgewogICAgIGdvb2dsZSgpCi0gICAgamNlbnRlcigpCisgICAgbWF2ZW5DZW50cmFsKCkKIH0KIAogZGVwZW5kZW5jaWVzIHsKICAgICBpbXBsZW1lbnRhdGlvbiBmaWxlVHJlZShkaXI6ICdsaWJzJywgaW5jbHVkZTogWycqLmphciddKQotICAgIGltcGxlbWVudGF0aW9uICdhbmRyb2lkeC5hcHBjb21wYXQ6YXBwY29tcGF0OjEuMS4wJwotICAgIHRlc3RJbXBsZW1lbnRhdGlvbiAnanVuaXQ6anVuaXQ6NC4xMicKLSAgICBhbmRyb2lkVGVzdEltcGxlbWVudGF0aW9uICdhbmRyb2lkeC50ZXN0OnJ1bm5lcjoxLjIuMCcKLSAgICBhbmRyb2lkVGVzdEltcGxlbWVudGF0aW9uICdhbmRyb2lkeC50ZXN0LmV4dDpqdW5pdDoxLjEuMScKKyAgICBpbXBsZW1lbnRhdGlvbiAnYW5kcm9pZHguYXBwY29tcGF0OmFwcGNvbXBhdDoxLjMuMCcKKyAgICB0ZXN0SW1wbGVtZW50YXRpb24gJ2p1bml0Omp1bml0OjQuMTMuMicKKyAgICBhbmRyb2lkVGVzdEltcGxlbWVudGF0aW9uICdhbmRyb2lkeC50ZXN0OnJ1bm5lcjoxLjMuMCcKKyAgICBhbmRyb2lkVGVzdEltcGxlbWVudGF0aW9uICdhbmRyb2lkeC50ZXN0LmV4dDpqdW5pdDoxLjEuMicKIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvTWVkaWFCZW5jaG1hcmtUZXN0L3NyYy9tYWluL2NwcC9BbmRyb2lkLmJwIGIvbWVkaWEvdGVzdHMvYmVuY2htYXJrL01lZGlhQmVuY2htYXJrVGVzdC9zcmMvbWFpbi9jcHAvQW5kcm9pZC5icAppbmRleCBhZjkyNDI0Li4wMTkyZDY4IDEwMDY0NAotLS0gYS9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvTWVkaWFCZW5jaG1hcmtUZXN0L3NyYy9tYWluL2NwcC9BbmRyb2lkLmJwCisrKyBiL21lZGlhL3Rlc3RzL2JlbmNobWFyay9NZWRpYUJlbmNobWFya1Rlc3Qvc3JjL21haW4vY3BwL0FuZHJvaWQuYnAKQEAgLTksNyArOSw2IEBACiAKIGNjX3Rlc3RfbGlicmFyeSB7CiAgICAgbmFtZTogImxpYm1lZGlhYmVuY2htYXJrX2puaSIsCi0gICAgc2RrX3ZlcnNpb246ICJjdXJyZW50IiwKIAogICAgIGRlZmF1bHRzOiBbCiAgICAgICAgICJsaWJtZWRpYWJlbmNobWFya19jb21tb24tZGVmYXVsdHMiLApkaWZmIC0tZ2l0IGEvbWVkaWEvdGVzdHMvYmVuY2htYXJrL3NyYy9uYXRpdmUvY29tbW9uL0FuZHJvaWQuYnAgYi9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvc3JjL25hdGl2ZS9jb21tb24vQW5kcm9pZC5icAppbmRleCA2YjU0YzZhLi43MThkMjE3IDEwMDY0NAotLS0gYS9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvc3JjL25hdGl2ZS9jb21tb24vQW5kcm9pZC5icAorKysgYi9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvc3JjL25hdGl2ZS9jb21tb24vQW5kcm9pZC5icApAQCAtNTUsNyArNTUsNiBAQAogCiBjY19kZWZhdWx0cyB7CiAgICAgbmFtZTogImxpYm1lZGlhYmVuY2htYXJrLWRlZmF1bHRzIiwKLSAgICBzZGtfdmVyc2lvbjogImN1cnJlbnQiLAogICAgIHN0bDogImMrK19zaGFyZWQiLAogCiAgICAgc2hhcmVkX2xpYnM6IFsKZGlmZiAtLWdpdCBhL21lZGlhL3Rlc3RzL2JlbmNobWFyay9zcmMvbmF0aXZlL2V4dHJhY3Rvci9FeHRyYWN0b3IuY3BwIGIvbWVkaWEvdGVzdHMvYmVuY2htYXJrL3NyYy9uYXRpdmUvZXh0cmFjdG9yL0V4dHJhY3Rvci5jcHAKaW5kZXggZjBiYjNiOS4uM2JkZmJhZCAxMDA2NDQKLS0tIGEvbWVkaWEvdGVzdHMvYmVuY2htYXJrL3NyYy9uYXRpdmUvZXh0cmFjdG9yL0V4dHJhY3Rvci5jcHAKKysrIGIvbWVkaWEvdGVzdHMvYmVuY2htYXJrL3NyYy9uYXRpdmUvZXh0cmFjdG9yL0V4dHJhY3Rvci5jcHAKQEAgLTEyNCw5ICsxMjQsNyBAQAogCiAgICAgaW50NjRfdCBzVGltZSA9IG1TdGF0cy0+Z2V0Q3VyVGltZSgpOwogICAgIGlmIChtRXh0cmFjdG9yKSB7Ci0gICAgICAgIC8vIFRPRE86IChiLzE0MDEyODUwNSkgTXVsdGlwbGUgY2FsbHMgcmVzdWx0IGluIERvUy4KLSAgICAgICAgLy8gVW5jb21tZW50IGNhbGwgdG8gQU1lZGlhRXh0cmFjdG9yX2RlbGV0ZSgpIG9uY2UgdGhpcyBpcyByZXNvbHZlZAotICAgICAgICAvLyBBTWVkaWFFeHRyYWN0b3JfZGVsZXRlKG1FeHRyYWN0b3IpOworICAgICAgICBBTWVkaWFFeHRyYWN0b3JfZGVsZXRlKG1FeHRyYWN0b3IpOwogICAgICAgICBtRXh0cmFjdG9yID0gbnVsbHB0cjsKICAgICB9CiAgICAgaW50NjRfdCBlVGltZSA9IG1TdGF0cy0+Z2V0Q3VyVGltZSgpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvdGVzdHMvYmVuY2htYXJrL3Rlc3RzL0FuZHJvaWQuYnAgYi9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvdGVzdHMvQW5kcm9pZC5icAppbmRleCAwZmJkMjBkLi45YThjYWEzIDEwMDY0NAotLS0gYS9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvdGVzdHMvQW5kcm9pZC5icAorKysgYi9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvdGVzdHMvQW5kcm9pZC5icApAQCAtMzMsNyArMzMsMTIgQEAKIAogICAgIHNyY3M6IFsiRXh0cmFjdG9yVGVzdC5jcHAiXSwKIAotICAgIHN0YXRpY19saWJzOiBbImxpYm1lZGlhYmVuY2htYXJrX2V4dHJhY3RvciJdCisgICAgc3RhdGljX2xpYnM6IFsibGlibWVkaWFiZW5jaG1hcmtfZXh0cmFjdG9yIl0sCisKKyAgICBzaGFyZWRfbGliczogWworICAgICAgICAibGliYmFzZSIsCisgICAgICAgICJsaWJiaW5kZXJfbmRrIiwKKyAgICBdLAogfQogCiBjY190ZXN0IHsKQEAgLTUwLDYgKzU1LDExIEBACiAgICAgICAgICJsaWJtZWRpYWJlbmNobWFya19leHRyYWN0b3IiLAogICAgICAgICAibGlibWVkaWFiZW5jaG1hcmtfZGVjb2RlciIsCiAgICAgXSwKKworICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJiYXNlIiwKKyAgICAgICAgImxpYmJpbmRlcl9uZGsiLAorICAgIF0sCiB9CiAKIGNjX3Rlc3QgewpkaWZmIC0tZ2l0IGEvbWVkaWEvdGVzdHMvYmVuY2htYXJrL3Rlc3RzL0RlY29kZXJUZXN0LmNwcCBiL21lZGlhL3Rlc3RzL2JlbmNobWFyay90ZXN0cy9EZWNvZGVyVGVzdC5jcHAKaW5kZXggODFlZjAyYS4uMzY2NjcyNCAxMDA2NDQKLS0tIGEvbWVkaWEvdGVzdHMvYmVuY2htYXJrL3Rlc3RzL0RlY29kZXJUZXN0LmNwcAorKysgYi9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvdGVzdHMvRGVjb2RlclRlc3QuY3BwCkBAIC0yMSw2ICsyMSw4IEBACiAjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8bGltaXRzPgogCisjaW5jbHVkZSA8YW5kcm9pZC9iaW5kZXJfcHJvY2Vzcy5oPgorCiAjaW5jbHVkZSAiQmVuY2htYXJrVGVzdEVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiRGVjb2Rlci5oIgogCkBAIC0xNzUsNiArMTc3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImMyLmFuZHJvaWQuaGV2Yy5kZWNvZGVyIiwgdHJ1ZSkpKTsKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CisgICAgQUJpbmRlclByb2Nlc3Nfc3RhcnRUaHJlYWRQb29sKCk7CiAgICAgZ0VudiA9IG5ldyBCZW5jaG1hcmtUZXN0RW52aXJvbm1lbnQoKTsKICAgICA6OnRlc3Rpbmc6OkFkZEdsb2JhbFRlc3RFbnZpcm9ubWVudChnRW52KTsKICAgICA6OnRlc3Rpbmc6OkluaXRHb29nbGVUZXN0KCZhcmdjLCBhcmd2KTsKZGlmZiAtLWdpdCBhL21lZGlhL3Rlc3RzL2JlbmNobWFyay90ZXN0cy9FeHRyYWN0b3JUZXN0LmNwcCBiL21lZGlhL3Rlc3RzL2JlbmNobWFyay90ZXN0cy9FeHRyYWN0b3JUZXN0LmNwcAppbmRleCBkMTRkMTViLi4yN2VlOWJhIDEwMDY0NAotLS0gYS9tZWRpYS90ZXN0cy9iZW5jaG1hcmsvdGVzdHMvRXh0cmFjdG9yVGVzdC5jcHAKKysrIGIvbWVkaWEvdGVzdHMvYmVuY2htYXJrL3Rlc3RzL0V4dHJhY3RvclRlc3QuY3BwCkBAIC0xOSw2ICsxOSw4IEBACiAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCisjaW5jbHVkZSA8YW5kcm9pZC9iaW5kZXJfcHJvY2Vzcy5oPgorCiAjaW5jbHVkZSAiQmVuY2htYXJrVGVzdEVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiRXh0cmFjdG9yLmgiCiAKQEAgLTczLDYgKzc1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpKTsKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CisgICAgQUJpbmRlclByb2Nlc3Nfc3RhcnRUaHJlYWRQb29sKCk7CiAgICAgZ0VudiA9IG5ldyBCZW5jaG1hcmtUZXN0RW52aXJvbm1lbnQoKTsKICAgICA6OnRlc3Rpbmc6OkFkZEdsb2JhbFRlc3RFbnZpcm9ubWVudChnRW52KTsKICAgICA6OnRlc3Rpbmc6OkluaXRHb29nbGVUZXN0KCZhcmdjLCBhcmd2KTsKZGlmZiAtLWdpdCBhL21lZGlhL3V0aWxzL0FuZHJvaWQuYnAgYi9tZWRpYS91dGlscy9BbmRyb2lkLmJwCmluZGV4IDczYzRlM2IuLjg4YjgyMmQgMTAwNjQ0Ci0tLSBhL21lZGlhL3V0aWxzL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvdXRpbHMvQW5kcm9pZC5icApAQCAtNTEsNiArNTEsNyBAQAogICAgICAgICAibGlicGVybWlzc2lvbiIsCiAgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmdyYXBoaWNzLmJ1ZmZlcnF1ZXVlQDEuMCIsCiAgICAgICAgICJhbmRyb2lkLmhpZGwudG9rZW5AMS4wLXV0aWxzIiwKKyAgICAgICAgInBhY2thZ2VtYW5hZ2VyX2FpZGwtY3BwIiwKICAgICBdLAogICAgIGV4cG9ydF9zdGF0aWNfbGliX2hlYWRlcnM6IFsKICAgICAgICAgImxpYmJhdHRlcnlzdGF0c19haWRsIiwKZGlmZiAtLWdpdCBhL21lZGlhL3V0aWxzL1NlcnZpY2VVdGlsaXRpZXMuY3BwIGIvbWVkaWEvdXRpbHMvU2VydmljZVV0aWxpdGllcy5jcHAKaW5kZXggOWM3Yjg2My4uNDJmNDhhNSAxMDA2NDQKLS0tIGEvbWVkaWEvdXRpbHMvU2VydmljZVV0aWxpdGllcy5jcHAKKysrIGIvbWVkaWEvdXRpbHMvU2VydmljZVV0aWxpdGllcy5jcHAKQEAgLTEwMSw3ICsxMDEsMTEgQEAKICAgICBBdHRyaWJ1dGlvblNvdXJjZVN0YXRlIG15QXR0cmlidXRpb25Tb3VyY2U7CiAgICAgbXlBdHRyaWJ1dGlvblNvdXJjZS51aWQgPSBWQUxVRV9PUl9GQVRBTChhbmRyb2lkOjpsZWdhY3kyYWlkbF91aWRfdF9pbnQzMl90KGdldHVpZCgpKSk7CiAgICAgbXlBdHRyaWJ1dGlvblNvdXJjZS5waWQgPSBWQUxVRV9PUl9GQVRBTChhbmRyb2lkOjpsZWdhY3kyYWlkbF9waWRfdF9pbnQzMl90KGdldHBpZCgpKSk7Ci0gICAgbXlBdHRyaWJ1dGlvblNvdXJjZS50b2tlbiA9IHNwPEJCaW5kZXI+OjptYWtlKCk7CisgICAgaWYgKGNhbGxlckF0dHJpYnV0aW9uU291cmNlLnRva2VuICE9IG51bGxwdHIpIHsKKyAgICAgICAgbXlBdHRyaWJ1dGlvblNvdXJjZS50b2tlbiA9IGNhbGxlckF0dHJpYnV0aW9uU291cmNlLnRva2VuOworICAgIH0gZWxzZSB7CisgICAgICAgIG15QXR0cmlidXRpb25Tb3VyY2UudG9rZW4gPSBzcDxCQmluZGVyPjo6bWFrZSgpOworICAgIH0KICAgICBteUF0dHJpYnV0aW9uU291cmNlLm5leHQucHVzaF9iYWNrKG5leHRBdHRyaWJ1dGlvblNvdXJjZSk7CiAKICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxBdHRyaWJ1dGlvblNvdXJjZVN0YXRlPntteUF0dHJpYnV0aW9uU291cmNlfTsKZGlmZiAtLWdpdCBhL21lZGlhL3V0aWxzL2Z1enplcnMvQW5kcm9pZC5icCBiL21lZGlhL3V0aWxzL2Z1enplcnMvQW5kcm9pZC5icAppbmRleCBjMTY5OGRjLi5jNGRjMjRmIDEwMDY0NAotLS0gYS9tZWRpYS91dGlscy9mdXp6ZXJzL0FuZHJvaWQuYnAKKysrIGIvbWVkaWEvdXRpbHMvZnV6emVycy9BbmRyb2lkLmJwCkBAIC0xOCw2ICsxOCw3IEBACiAgICAgICAgICJsaWJ1dGlscyIsCiAgICAgICAgICJsaWJiaW5kZXIiLAogICAgICAgICAiZnJhbWV3b3JrLXBlcm1pc3Npb24tYWlkbC1jcHAiLAorICAgICAgICAicGFja2FnZW1hbmFnZXJfYWlkbC1jcHAiLAogICAgIF0sCiAKICAgICBjZmxhZ3M6IFsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL09XTkVSUyBiL3NlcnZpY2VzL09XTkVSUwppbmRleCBmMGI1ZTJmLi4xN2U2MDVkIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9PV05FUlMKKysrIGIvc2VydmljZXMvT1dORVJTCkBAIC0xLDkgKzEsNiBAQAotY2h6QGdvb2dsZS5jb20KIGVsYXVyZW50QGdvb2dsZS5jb20KIGVzc2lja0Bnb29nbGUuY29tCiBldGFsdmFsYUBnb29nbGUuY29tCi1na2FzdGVuQGdvb2dsZS5jb20KIGh1bmdhQGdvb2dsZS5jb20KLW1hcmNvbmVAZ29vZ2xlLmNvbQogbmNoYWxrb0Bnb29nbGUuY29tCiBxdXhpYW5nZmFuZ0Bnb29nbGUuY29tCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvQW5kcm9pZC5icCBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BbmRyb2lkLmJwCmluZGV4IGI5MWYzMDIuLmZlY2MxODMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BbmRyb2lkLmJwCisrKyBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BbmRyb2lkLmJwCkBAIC04MSw2ICs4MSw3IEBACiAgICAgICAgICJsaWJtZWRpYV9oZWxwZXIiLAogICAgICAgICAibGlic2htZW1jb21wYXQiLAogICAgICAgICAibGlidmlicmF0b3IiLAorICAgICAgICAicGFja2FnZW1hbmFnZXJfYWlkbC1jcHAiLAogICAgIF0sCiAKICAgICBzdGF0aWNfbGliczogWwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0F1ZGlvRmxpbmdlci5jcHAgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvQXVkaW9GbGluZ2VyLmNwcAppbmRleCAzYTNmYjVlLi4wNzE4NjQzIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvQXVkaW9GbGluZ2VyLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvQXVkaW9GbGluZ2VyLmNwcApAQCAtOTk4LDggKzk5OCw5IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgc2V0QXVkaW9Id1N5bmNGb3JTZXNzaW9uX2wodGhyZWFkLCBzZXNzaW9uSWQpOworICAgICAgICBpZiAoKG91dHB1dC5mbGFncyAmIEFVRElPX09VVFBVVF9GTEFHX0hXX0FWX1NZTkMpID09IEFVRElPX09VVFBVVF9GTEFHX0hXX0FWX1NZTkMpIHsKKyAgICAgICAgICAgIHNldEF1ZGlvSHdTeW5jRm9yU2Vzc2lvbl9sKHRocmVhZCwgc2Vzc2lvbklkKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChsU3RhdHVzICE9IE5PX0VSUk9SKSB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvUGxheWJhY2tUcmFja3MuaCBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9QbGF5YmFja1RyYWNrcy5oCmluZGV4IDNjY2U5OTguLmFlY2Q0ZDMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9QbGF5YmFja1RyYWNrcy5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9QbGF5YmFja1RyYWNrcy5oCkBAIC0xOTMsNiArMTkzLDEyIEBACiAgICAgICAgfQogICAgIH0KIAorICAgIHN0YXRpYyBib29sIGNoZWNrU2VydmVyTGF0ZW5jeVN1cHBvcnRlZCgKKyAgICAgICAgICAgIGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCwgYXVkaW9fb3V0cHV0X2ZsYWdzX3QgZmxhZ3MpIHsKKyAgICAgICAgcmV0dXJuIGF1ZGlvX2lzX2xpbmVhcl9wY20oZm9ybWF0KQorICAgICAgICAgICAgICAgICYmIChmbGFncyAmIEFVRElPX09VVFBVVF9GTEFHX0hXX0FWX1NZTkMpID09IDA7CisgICAgfQorCiAgICAgYXVkaW9fb3V0cHV0X2ZsYWdzX3QgZ2V0T3V0cHV0RmxhZ3MoKSBjb25zdCB7IHJldHVybiBtRmxhZ3M7IH0KICAgICBmbG9hdCBnZXRTcGVlZCgpIGNvbnN0IHsgcmV0dXJuIG1TcGVlZDsgfQogCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvVHJhY2tzLmNwcCBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9UcmFja3MuY3BwCmluZGV4IGUwYzVmYTUuLjIzMzg2NWYgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9UcmFja3MuY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9UcmFja3MuY3BwCkBAIC03MTMsOCArNzEzLDcgQEAKICAgICAgICAgdGhyZWFkLT5tRmFzdFRyYWNrQXZhaWxNYXNrICY9IH4oMSA8PCBpKTsKICAgICB9CiAKLSAgICBtU2VydmVyTGF0ZW5jeVN1cHBvcnRlZCA9IHRocmVhZC0+dHlwZSgpID09IFRocmVhZEJhc2U6Ok1JWEVSCi0gICAgICAgICAgICB8fCB0aHJlYWQtPnR5cGUoKSA9PSBUaHJlYWRCYXNlOjpEVVBMSUNBVElORzsKKyAgICBtU2VydmVyTGF0ZW5jeVN1cHBvcnRlZCA9IGNoZWNrU2VydmVyTGF0ZW5jeVN1cHBvcnRlZChmb3JtYXQsIGZsYWdzKTsKICNpZmRlZiBURUVfU0lOSwogICAgIG1UZWUuc2V0SWQoc3RkOjpzdHJpbmcoIl8iKSArIHN0ZDo6dG9fc3RyaW5nKG1UaHJlYWRJb0hhbmRsZSkKICAgICAgICAgICAgICsgIl8iICsgc3RkOjp0b19zdHJpbmcobUlkKSArICJfVCIpOwpAQCAtMTQwNSw2ICsxNDA0LDYwIEBACiAgICAgICAgICAgICAuY29udGVudF90eXBlID0gbUF0dHIuY29udGVudF90eXBlLAogICAgICAgICAgICAgLmdhaW4gPSBtRmluYWxWb2x1bWUsCiAgICAgfTsKKworICAgIC8vIFdoZW4gYXR0cmlidXRlcyBhcmUgdW5kZWZpbmVkLCBkZXJpdmUgZGVmYXVsdCB2YWx1ZXMgZnJvbSBzdHJlYW0gdHlwZS4KKyAgICAvLyBTZWUgQXVkaW9BdHRyaWJ1dGVzLmphdmEsIHVzYWdlRm9yU3RyZWFtVHlwZSgpIGFuZCBCdWlsZGVyLnNldEludGVybmFsTGVnYWN5U3RyZWFtVHlwZSgpCisgICAgaWYgKG1BdHRyLnVzYWdlID09IEFVRElPX1VTQUdFX1VOS05PV04pIHsKKyAgICAgICAgc3dpdGNoIChtU3RyZWFtVHlwZSkgeworICAgICAgICBjYXNlIEFVRElPX1NUUkVBTV9WT0lDRV9DQUxMOgorICAgICAgICAgICAgbWV0YWRhdGEuYmFzZS51c2FnZSA9IEFVRElPX1VTQUdFX1ZPSUNFX0NPTU1VTklDQVRJT047CisgICAgICAgICAgICBtZXRhZGF0YS5iYXNlLmNvbnRlbnRfdHlwZSA9IEFVRElPX0NPTlRFTlRfVFlQRV9TUEVFQ0g7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBVURJT19TVFJFQU1fU1lTVEVNOgorICAgICAgICAgICAgbWV0YWRhdGEuYmFzZS51c2FnZSA9IEFVRElPX1VTQUdFX0FTU0lTVEFOQ0VfU09OSUZJQ0FUSU9OOworICAgICAgICAgICAgbWV0YWRhdGEuYmFzZS5jb250ZW50X3R5cGUgPSBBVURJT19DT05URU5UX1RZUEVfU09OSUZJQ0FUSU9OOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVVESU9fU1RSRUFNX1JJTkc6CisgICAgICAgICAgICBtZXRhZGF0YS5iYXNlLnVzYWdlID0gQVVESU9fVVNBR0VfTk9USUZJQ0FUSU9OX1RFTEVQSE9OWV9SSU5HVE9ORTsKKyAgICAgICAgICAgIG1ldGFkYXRhLmJhc2UuY29udGVudF90eXBlID0gQVVESU9fQ09OVEVOVF9UWVBFX1NPTklGSUNBVElPTjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFVRElPX1NUUkVBTV9NVVNJQzoKKyAgICAgICAgICAgIG1ldGFkYXRhLmJhc2UudXNhZ2UgPSBBVURJT19VU0FHRV9NRURJQTsKKyAgICAgICAgICAgIG1ldGFkYXRhLmJhc2UuY29udGVudF90eXBlID0gQVVESU9fQ09OVEVOVF9UWVBFX01VU0lDOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVVESU9fU1RSRUFNX0FMQVJNOgorICAgICAgICAgICAgbWV0YWRhdGEuYmFzZS51c2FnZSA9IEFVRElPX1VTQUdFX0FMQVJNOworICAgICAgICAgICAgbWV0YWRhdGEuYmFzZS5jb250ZW50X3R5cGUgPSBBVURJT19DT05URU5UX1RZUEVfU09OSUZJQ0FUSU9OOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVVESU9fU1RSRUFNX05PVElGSUNBVElPTjoKKyAgICAgICAgICAgIG1ldGFkYXRhLmJhc2UudXNhZ2UgPSBBVURJT19VU0FHRV9OT1RJRklDQVRJT047CisgICAgICAgICAgICBtZXRhZGF0YS5iYXNlLmNvbnRlbnRfdHlwZSA9IEFVRElPX0NPTlRFTlRfVFlQRV9TT05JRklDQVRJT047CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBVURJT19TVFJFQU1fRFRNRjoKKyAgICAgICAgICAgIG1ldGFkYXRhLmJhc2UudXNhZ2UgPSBBVURJT19VU0FHRV9WT0lDRV9DT01NVU5JQ0FUSU9OX1NJR05BTExJTkc7CisgICAgICAgICAgICBtZXRhZGF0YS5iYXNlLmNvbnRlbnRfdHlwZSA9IEFVRElPX0NPTlRFTlRfVFlQRV9TT05JRklDQVRJT047CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBVURJT19TVFJFQU1fQUNDRVNTSUJJTElUWToKKyAgICAgICAgICAgIG1ldGFkYXRhLmJhc2UudXNhZ2UgPSBBVURJT19VU0FHRV9BU1NJU1RBTkNFX0FDQ0VTU0lCSUxJVFk7CisgICAgICAgICAgICBtZXRhZGF0YS5iYXNlLmNvbnRlbnRfdHlwZSA9IEFVRElPX0NPTlRFTlRfVFlQRV9TUEVFQ0g7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBVURJT19TVFJFQU1fQVNTSVNUQU5UOgorICAgICAgICAgICAgbWV0YWRhdGEuYmFzZS51c2FnZSA9IEFVRElPX1VTQUdFX0FTU0lTVEFOVDsKKyAgICAgICAgICAgIG1ldGFkYXRhLmJhc2UuY29udGVudF90eXBlID0gQVVESU9fQ09OVEVOVF9UWVBFX1NQRUVDSDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFVRElPX1NUUkVBTV9SRVJPVVRJTkc6CisgICAgICAgICAgICBtZXRhZGF0YS5iYXNlLnVzYWdlID0gQVVESU9fVVNBR0VfVklSVFVBTF9TT1VSQ0U7CisgICAgICAgICAgICAvLyB1bmtub3duIGNvbnRlbnQgdHlwZQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVVESU9fU1RSRUFNX0NBTExfQVNTSVNUQU5UOgorICAgICAgICAgICAgbWV0YWRhdGEuYmFzZS51c2FnZSA9IEFVRElPX1VTQUdFX0NBTExfQVNTSVNUQU5UOworICAgICAgICAgICAgbWV0YWRhdGEuYmFzZS5jb250ZW50X3R5cGUgPSBBVURJT19DT05URU5UX1RZUEVfU1BFRUNIOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwogICAgIG1ldGFkYXRhLmNoYW5uZWxfbWFzayA9IG1DaGFubmVsTWFzaywKICAgICBzdHJuY3B5KG1ldGFkYXRhLnRhZ3MsIG1BdHRyLnRhZ3MsIEFVRElPX0FUVFJJQlVURVNfVEFHU19NQVhfU0laRSk7CiAgICAgKmJhY2tJbnNlcnRlcisrID0gbWV0YWRhdGE7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9BdWRpb1BvbGljeUludGVyZmFjZS5oIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvQXVkaW9Qb2xpY3lJbnRlcmZhY2UuaAppbmRleCA0MDc4Mjc4Li4wOTUyM2QwIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9BdWRpb1BvbGljeUludGVyZmFjZS5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L0F1ZGlvUG9saWN5SW50ZXJmYWNlLmgKQEAgLTI4NSw4ICsyODUsOCBAQAogCiAgICAgdmlydHVhbCBib29sICAgICBpc0hhcHRpY1BsYXliYWNrU3VwcG9ydGVkKCkgPSAwOwogCi0gICAgdmlydHVhbCBzdGF0dXNfdCBnZXRId09mZmxvYWRFbmNvZGluZ0Zvcm1hdHNTdXBwb3J0ZWRGb3JBMkRQKAotICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGF1ZGlvX2Zvcm1hdF90PiAqZm9ybWF0cykgPSAwOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0SHdPZmZsb2FkRm9ybWF0c1N1cHBvcnRlZEZvckJsdWV0b290aE1lZGlhKAorICAgICAgICAgICAgICAgIGF1ZGlvX2RldmljZXNfdCBkZXZpY2UsIHN0ZDo6dmVjdG9yPGF1ZGlvX2Zvcm1hdF90PiAqZm9ybWF0cykgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkICAgICBzZXRBcHBTdGF0ZShhdWRpb19wb3J0X2hhbmRsZV90IHBvcnRJZCwgYXBwX3N0YXRlX3Qgc3RhdGUpID0gMDsKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvRGV2aWNlRGVzY3JpcHRvci5jcHAgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9EZXZpY2VEZXNjcmlwdG9yLmNwcAppbmRleCAxNzIyMDMyLi5jOWM4ZWRlIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9EZXZpY2VEZXNjcmlwdG9yLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9EZXZpY2VEZXNjcmlwdG9yLmNwcApAQCAtNTgsMTUgKzU4LDYgQEAKICAgICAgICAgbURlY2xhcmVkQWRkcmVzcyhEZXZpY2VEZXNjcmlwdG9yQmFzZTo6YWRkcmVzcygpKQogewogICAgIG1DdXJyZW50RW5jb2RlZEZvcm1hdCA9IEFVRElPX0ZPUk1BVF9ERUZBVUxUOwotICAgIC8qIElmIGZyYW1ld29yayBydW5zIGFnYWluc3QgYSBwcmUgNS4wIEF1ZGlvIEhBTCwgZW5jb2RlZCBmb3JtYXRzIGFyZSBhYnNlbnQgZnJvbSB0aGUgY29uZmlnLgotICAgICAqIEZJWE1FOiBBUE0gc2hvdWxkIGtub3cgdGhlIHZlcnNpb24gb2YgdGhlIEhBTCBhbmQgZG9uJ3QgYWRkIHRoZSBmb3JtYXRzIGZvciBWNS4wLgotICAgICAqIEZvciBub3csIHRoZSB3b3JrYXJvdW5kIHRvIHJlbW92ZSBBQzMgYW5kIElFQzYxOTM3IHN1cHBvcnQgb24gSERNSSBpcyB0byBkZWNsYXJlCi0gICAgICogc29tZXRoaW5nIGxpa2UgJ2VuY29kZWRGb3JtYXRzPSJBVURJT19GT1JNQVRfUENNXzE2X0JJVCInIG9uIHRoZSBIRE1JIGRldmljZVBvcnQuCi0gICAgICovCi0gICAgaWYgKG1EZXZpY2VUeXBlQWRkci5tVHlwZSA9PSBBVURJT19ERVZJQ0VfT1VUX0hETUkgJiYgbUVuY29kZWRGb3JtYXRzLmVtcHR5KCkpIHsKLSAgICAgICAgbUVuY29kZWRGb3JtYXRzLnB1c2hfYmFjayhBVURJT19GT1JNQVRfQUMzKTsKLSAgICAgICAgbUVuY29kZWRGb3JtYXRzLnB1c2hfYmFjayhBVURJT19GT1JNQVRfSUVDNjE5MzcpOwotICAgIH0KIH0KIAogdm9pZCBEZXZpY2VEZXNjcmlwdG9yOjphdHRhY2goY29uc3Qgc3A8SHdNb2R1bGU+JiBtb2R1bGUpCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9Qb2xpY3lBdWRpb1BvcnQuY3BwIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29tbW9uL21hbmFnZXJkZWZpbml0aW9ucy9zcmMvUG9saWN5QXVkaW9Qb3J0LmNwcAppbmRleCA4YzYxYjkwLi41OTg2MDY5IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb21tb24vbWFuYWdlcmRlZmluaXRpb25zL3NyYy9Qb2xpY3lBdWRpb1BvcnQuY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbW1vbi9tYW5hZ2VyZGVmaW5pdGlvbnMvc3JjL1BvbGljeUF1ZGlvUG9ydC5jcHAKQEAgLTMwLDkgKzMwLDkgQEAKIC8vIC0tLSBQb2xpY3lBdWRpb1BvcnQgY2xhc3MgaW1wbGVtZW50YXRpb24KIHZvaWQgUG9saWN5QXVkaW9Qb3J0OjphdHRhY2goY29uc3Qgc3A8SHdNb2R1bGU+JiBtb2R1bGUpCiB7CisgICAgbU1vZHVsZSA9IG1vZHVsZTsKICAgICBBTE9HVigiJXM6IGF0dGFjaGluZyBtb2R1bGUgJXMgdG8gcG9ydCAlcyIsCiAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGdldE1vZHVsZU5hbWUoKSwgYXNBdWRpb1BvcnQoKS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAgIG1Nb2R1bGUgPSBtb2R1bGU7CiB9CiAKIHZvaWQgUG9saWN5QXVkaW9Qb3J0OjpkZXRhY2goKQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29uZmlnL2JsdWV0b290aF9hdWRpb19wb2xpY3lfY29uZmlndXJhdGlvbi54bWwgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb25maWcvYmx1ZXRvb3RoX2F1ZGlvX3BvbGljeV9jb25maWd1cmF0aW9uLnhtbAppbmRleCA5ODQxNWI3Li4yMmZmOTU0IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb25maWcvYmx1ZXRvb3RoX2F1ZGlvX3BvbGljeV9jb25maWd1cmF0aW9uLnhtbAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb25maWcvYmx1ZXRvb3RoX2F1ZGlvX3BvbGljeV9jb25maWd1cmF0aW9uLnhtbApAQCAtMjIsNiArMjIsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nUmF0ZXM9IjgwMDAsMTYwMDAsMjQwMDAsMzIwMDAsNDQxMDAsNDgwMDAiCiAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsTWFza3M9IkFVRElPX0NIQU5ORUxfT1VUX01PTk8sQVVESU9fQ0hBTk5FTF9PVVRfU1RFUkVPIi8+CiAgICAgICAgIDwvbWl4UG9ydD4KKyAgICAgICAgPG1peFBvcnQgbmFtZT0ibGUgYXVkaW8gaW5wdXQiIHJvbGU9InNpbmsiPgorICAgICAgICAgICAgPHByb2ZpbGUgbmFtZT0iIiBmb3JtYXQ9IkFVRElPX0ZPUk1BVF9QQ01fMTZfQklUIgorICAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmdSYXRlcz0iODAwMCwxNjAwMCwyNDAwMCwzMjAwMCw0NDEwMCw0ODAwMCIKKyAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxNYXNrcz0iQVVESU9fQ0hBTk5FTF9JTl9NT05PLEFVRElPX0NIQU5ORUxfSU5fU1RFUkVPIi8+CisgICAgICAgICAgICA8cHJvZmlsZSBuYW1lPSIiIGZvcm1hdD0iQVVESU9fRk9STUFUX1BDTV8yNF9CSVRfUEFDS0VEIgorICAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmdSYXRlcz0iODAwMCwxNjAwMCwyNDAwMCwzMjAwMCw0NDEwMCw0ODAwMCIKKyAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxNYXNrcz0iQVVESU9fQ0hBTk5FTF9JTl9NT05PLEFVRElPX0NIQU5ORUxfSU5fU1RFUkVPIi8+CisgICAgICAgICAgICA8cHJvZmlsZSBuYW1lPSIiIGZvcm1hdD0iQVVESU9fRk9STUFUX1BDTV8zMl9CSVQiCisgICAgICAgICAgICAgICAgICAgICBzYW1wbGluZ1JhdGVzPSI4MDAwLDE2MDAwLDI0MDAwLDMyMDAwLDQ0MTAwLDQ4MDAwIgorICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbE1hc2tzPSJBVURJT19DSEFOTkVMX0lOX01PTk8sQVVESU9fQ0hBTk5FTF9JTl9TVEVSRU8iLz4KKyAgICAgICAgPC9taXhQb3J0PgogICAgIDwvbWl4UG9ydHM+CiAgICAgPGRldmljZVBvcnRzPgogICAgICAgICA8IS0tIEEyRFAgQXVkaW8gUG9ydHMgLS0+CkBAIC00OSw2ICs2MCw3IEBACiAgICAgICAgIC0tPgogICAgICAgICA8ZGV2aWNlUG9ydCB0YWdOYW1lPSJCTEUgSGVhZHNldCBPdXQiIHR5cGU9IkFVRElPX0RFVklDRV9PVVRfQkxFX0hFQURTRVQiIHJvbGU9InNpbmsiLz4KICAgICAgICAgPGRldmljZVBvcnQgdGFnTmFtZT0iQkxFIFNwZWFrZXIgT3V0IiB0eXBlPSJBVURJT19ERVZJQ0VfT1VUX0JMRV9TUEVBS0VSIiByb2xlPSJzaW5rIi8+CisgICAgICAgIDxkZXZpY2VQb3J0IHRhZ05hbWU9IkJMRSBIZWFkc2V0IEluIiB0eXBlPSJBVURJT19ERVZJQ0VfSU5fQkxFX0hFQURTRVQiIHJvbGU9InNvdXJjZSIvPgogICAgIDwvZGV2aWNlUG9ydHM+CiAgICAgPHJvdXRlcz4KICAgICAgICAgPHJvdXRlIHR5cGU9Im1peCIgc2luaz0iQlQgQTJEUCBPdXQiCkBAIC02MSw2ICs3Myw4IEBACiAgICAgICAgICAgICAgICBzb3VyY2VzPSJoZWFyaW5nIGFpZCBvdXRwdXQiLz4KICAgICAgICAgPHJvdXRlIHR5cGU9Im1peCIgc2luaz0iQkxFIEhlYWRzZXQgT3V0IgogICAgICAgICAgICAgICAgc291cmNlcz0ibGUgYXVkaW8gb3V0cHV0Ii8+CisgICAgICAgIDxyb3V0ZSB0eXBlPSJtaXgiIHNpbms9ImxlIGF1ZGlvIGlucHV0IgorICAgICAgICAgICAgICAgc291cmNlcz0iQkxFIEhlYWRzZXQgSW4iLz4KICAgICAgICAgPHJvdXRlIHR5cGU9Im1peCIgc2luaz0iQkxFIFNwZWFrZXIgT3V0IgogICAgICAgICAgICAgICAgc291cmNlcz0ibGUgYXVkaW8gb3V0cHV0Ii8+CiAgICAgPC9yb3V0ZXM+CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb25maWcvYmx1ZXRvb3RoX2F1ZGlvX3BvbGljeV9jb25maWd1cmF0aW9uXzdfMC54bWwgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb25maWcvYmx1ZXRvb3RoX2F1ZGlvX3BvbGljeV9jb25maWd1cmF0aW9uXzdfMC54bWwKaW5kZXggZmJlNzU3MS4uYWFkMDBkNiAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvY29uZmlnL2JsdWV0b290aF9hdWRpb19wb2xpY3lfY29uZmlndXJhdGlvbl83XzAueG1sCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbmZpZy9ibHVldG9vdGhfYXVkaW9fcG9saWN5X2NvbmZpZ3VyYXRpb25fN18wLnhtbApAQCAtMjIsNiArMjIsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nUmF0ZXM9IjgwMDAgMTYwMDAgMjQwMDAgMzIwMDAgNDQxMDAgNDgwMDAiCiAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsTWFza3M9IkFVRElPX0NIQU5ORUxfT1VUX01PTk8gQVVESU9fQ0hBTk5FTF9PVVRfU1RFUkVPIi8+CiAgICAgICAgIDwvbWl4UG9ydD4KKyAgICAgICAgPG1peFBvcnQgbmFtZT0ibGUgYXVkaW8gaW5wdXQiIHJvbGU9InNpbmsiPgorICAgICAgICAgICAgPHByb2ZpbGUgbmFtZT0iIiBmb3JtYXQ9IkFVRElPX0ZPUk1BVF9QQ01fMTZfQklUIgorICAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmdSYXRlcz0iODAwMCAxNjAwMCAyNDAwMCAzMjAwMCA0NDEwMCA0ODAwMCIKKyAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxNYXNrcz0iQVVESU9fQ0hBTk5FTF9JTl9NT05PIEFVRElPX0NIQU5ORUxfSU5fU1RFUkVPIi8+CisgICAgICAgICAgICA8cHJvZmlsZSBuYW1lPSIiIGZvcm1hdD0iQVVESU9fRk9STUFUX1BDTV8yNF9CSVRfUEFDS0VEIgorICAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmdSYXRlcz0iODAwMCAxNjAwMCAyNDAwMCAzMjAwMCA0NDEwMCA0ODAwMCIKKyAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxNYXNrcz0iQVVESU9fQ0hBTk5FTF9JTl9NT05PIEFVRElPX0NIQU5ORUxfSU5fU1RFUkVPIi8+CisgICAgICAgICAgICA8cHJvZmlsZSBuYW1lPSIiIGZvcm1hdD0iQVVESU9fRk9STUFUX1BDTV8zMl9CSVQiCisgICAgICAgICAgICAgICAgICAgICBzYW1wbGluZ1JhdGVzPSI4MDAwIDE2MDAwIDI0MDAwIDMyMDAwIDQ0MTAwIDQ4MDAwIgorICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbE1hc2tzPSJBVURJT19DSEFOTkVMX0lOX01PTk8gQVVESU9fQ0hBTk5FTF9JTl9TVEVSRU8iLz4KKyAgICAgICAgPC9taXhQb3J0PgogICAgIDwvbWl4UG9ydHM+CiAgICAgPGRldmljZVBvcnRzPgogICAgICAgICA8IS0tIEEyRFAgQXVkaW8gUG9ydHMgLS0+CkBAIC00NSw2ICs1Niw3IEBACiAgICAgICAgIDwhLS0gQkxFIEF1ZGlvIFBvcnRzIC0tPgogICAgICAgICA8ZGV2aWNlUG9ydCB0YWdOYW1lPSJCTEUgSGVhZHNldCBPdXQiIHR5cGU9IkFVRElPX0RFVklDRV9PVVRfQkxFX0hFQURTRVQiIHJvbGU9InNpbmsiLz4KICAgICAgICAgPGRldmljZVBvcnQgdGFnTmFtZT0iQkxFIFNwZWFrZXIgT3V0IiB0eXBlPSJBVURJT19ERVZJQ0VfT1VUX0JMRV9TUEVBS0VSIiByb2xlPSJzaW5rIi8+CisgICAgICAgIDxkZXZpY2VQb3J0IHRhZ05hbWU9IkJMRSBIZWFkc2V0IEluIiB0eXBlPSJBVURJT19ERVZJQ0VfSU5fQkxFX0hFQURTRVQiIHJvbGU9InNvdXJjZSIvPgogICAgIDwvZGV2aWNlUG9ydHM+CiAgICAgPHJvdXRlcz4KICAgICAgICAgPHJvdXRlIHR5cGU9Im1peCIgc2luaz0iQlQgQTJEUCBPdXQiCkBAIC01Nyw2ICs2OSw4IEBACiAgICAgICAgICAgICAgICBzb3VyY2VzPSJoZWFyaW5nIGFpZCBvdXRwdXQiLz4KICAgICAgICAgPHJvdXRlIHR5cGU9Im1peCIgc2luaz0iQkxFIEhlYWRzZXQgT3V0IgogICAgICAgICAgICAgICAgc291cmNlcz0ibGUgYXVkaW8gb3V0cHV0Ii8+CisgICAgICAgIDxyb3V0ZSB0eXBlPSJtaXgiIHNpbms9ImxlIGF1ZGlvIGlucHV0IgorICAgICAgICAgICAgICAgc291cmNlcz0iQkxFIEhlYWRzZXQgSW4iLz4KICAgICAgICAgPHJvdXRlIHR5cGU9Im1peCIgc2luaz0iQkxFIFNwZWFrZXIgT3V0IgogICAgICAgICAgICAgICAgc291cmNlcz0ibGUgYXVkaW8gb3V0cHV0Ii8+CiAgICAgPC9yb3V0ZXM+CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb25maWcvbGVfYXVkaW9fcG9saWN5X2NvbmZpZ3VyYXRpb24ueG1sIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvY29uZmlnL2xlX2F1ZGlvX3BvbGljeV9jb25maWd1cmF0aW9uLnhtbAppbmRleCBhM2RjNzJiLi5kY2RkODA1IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9jb25maWcvbGVfYXVkaW9fcG9saWN5X2NvbmZpZ3VyYXRpb24ueG1sCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2NvbmZpZy9sZV9hdWRpb19wb2xpY3lfY29uZmlndXJhdGlvbi54bWwKQEAgLTcsMTMgKzcsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nUmF0ZXM9IjgwMDAsMTYwMDAsMjQwMDAsMzIwMDAsNDQxMDAsNDgwMDAiCiAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsTWFza3M9IkFVRElPX0NIQU5ORUxfT1VUX01PTk8sQVVESU9fQ0hBTk5FTF9PVVRfU1RFUkVPIi8+CiAgICAgICAgIDwvbWl4UG9ydD4KKyAgICAgICAgPG1peFBvcnQgbmFtZT0ibGUgYXVkaW8gaW5wdXQiIHJvbGU9InNpbmsiPgorICAgICAgICAgICAgPHByb2ZpbGUgbmFtZT0iIiBmb3JtYXQ9IkFVRElPX0ZPUk1BVF9QQ01fMTZfQklULEFVRElPX0ZPUk1BVF9QQ01fMjRfQklULEFVRElPX0ZPUk1BVF9QQ01fMzJfQklUIgorICAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmdSYXRlcz0iODAwMCwxNjAwMCwyNDAwMCwzMjAwMCw0NDEwMCw0ODAwMCIKKyAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxNYXNrcz0iQVVESU9fQ0hBTk5FTF9JTl9NT05PLEFVRElPX0NIQU5ORUxfSU5fU1RFUkVPIi8+CisgICAgICAgIDwvbWl4UG9ydD4KICAgICA8L21peFBvcnRzPgogICAgIDxkZXZpY2VQb3J0cz4KICAgICAgICAgPGRldmljZVBvcnQgdGFnTmFtZT0iQkxFIEhlYWRzZXQgT3V0IiB0eXBlPSJBVURJT19ERVZJQ0VfT1VUX0JMRV9IRUFEU0VUIiByb2xlPSJzaW5rIi8+CiAgICAgICAgIDxkZXZpY2VQb3J0IHRhZ05hbWU9IkJMRSBTcGVha2VyIE91dCIgdHlwZT0iQVVESU9fREVWSUNFX09VVF9CTEVfU1BFQUtFUiIgcm9sZT0ic2luayIvPgorICAgICAgICA8ZGV2aWNlUG9ydCB0YWdOYW1lPSJCTEUgSGVhZHNldCBJbiIgdHlwZT0iQVVESU9fREVWSUNFX0lOX0JMRV9IRUFEU0VUIiByb2xlPSJzb3VyY2UiLz4KICAgICA8L2RldmljZVBvcnRzPgogICAgIDxyb3V0ZXM+CiAgICAgICAgIDxyb3V0ZSB0eXBlPSJtaXgiIHNpbms9IkJMRSBIZWFkc2V0IE91dCIgc291cmNlcz0ibGUgYXVkaW8gb3V0cHV0Ii8+CiAgICAgICAgIDxyb3V0ZSB0eXBlPSJtaXgiIHNpbms9IkJMRSBTcGVha2VyIE91dCIgc291cmNlcz0ibGUgYXVkaW8gb3V0cHV0Ii8+CisgICAgICAgIDxyb3V0ZSB0eXBlPSJtaXgiIHNpbms9ImxlIGF1ZGlvIGlucHV0IiBzb3VyY2VzPSJCTEUgSGVhZHNldCBJbiIvPgogICAgIDwvcm91dGVzPgogPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9lbmdpbmUvY29tbW9uL3NyYy9FbmdpbmVEZWZhdWx0Q29uZmlnLmggYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9lbmdpbmUvY29tbW9uL3NyYy9FbmdpbmVEZWZhdWx0Q29uZmlnLmgKaW5kZXggZDM5ZWZmNi4uNjY1YzJkZCAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvZW5naW5lL2NvbW1vbi9zcmMvRW5naW5lRGVmYXVsdENvbmZpZy5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2VuZ2luZS9jb21tb24vc3JjL0VuZ2luZURlZmF1bHRDb25maWcuaApAQCAtNjksMTIgKzY5LDYgQEAKICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHtBVURJT19DT05URU5UX1RZUEVfVU5LTk9XTiwgQVVESU9fVVNBR0VfTk9USUZJQ0FUSU9OLCBBVURJT19TT1VSQ0VfREVGQVVMVCwKICAgICAgICAgICAgICAgIEFVRElPX0ZMQUdfTk9ORSwgIiJ9LAotICAgICAgICAgICAgICB7QVVESU9fQ09OVEVOVF9UWVBFX1VOS05PV04sIEFVRElPX1VTQUdFX05PVElGSUNBVElPTl9DT01NVU5JQ0FUSU9OX1JFUVVFU1QsCi0gICAgICAgICAgICAgICBBVURJT19TT1VSQ0VfREVGQVVMVCwgQVVESU9fRkxBR19OT05FLCAiIn0sCi0gICAgICAgICAgICAgIHtBVURJT19DT05URU5UX1RZUEVfVU5LTk9XTiwgQVVESU9fVVNBR0VfTk9USUZJQ0FUSU9OX0NPTU1VTklDQVRJT05fSU5TVEFOVCwKLSAgICAgICAgICAgICAgIEFVRElPX1NPVVJDRV9ERUZBVUxULCBBVURJT19GTEFHX05PTkUsICIifSwKLSAgICAgICAgICAgICAge0FVRElPX0NPTlRFTlRfVFlQRV9VTktOT1dOLCBBVURJT19VU0FHRV9OT1RJRklDQVRJT05fQ09NTVVOSUNBVElPTl9ERUxBWUVELAotICAgICAgICAgICAgICAgQVVESU9fU09VUkNFX0RFRkFVTFQsIEFVRElPX0ZMQUdfTk9ORSwgIiJ9LAogICAgICAgICAgICAgICB7QVVESU9fQ09OVEVOVF9UWVBFX1VOS05PV04sIEFVRElPX1VTQUdFX05PVElGSUNBVElPTl9FVkVOVCwKICAgICAgICAgICAgICAgIEFVRElPX1NPVVJDRV9ERUZBVUxULCBBVURJT19GTEFHX05PTkUsICIifQogICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2VuZ2luZWNvbmZpZ3VyYWJsZS9jb25maWcvZXhhbXBsZS9waG9uZS9hdWRpb19wb2xpY3lfZW5naW5lX3Byb2R1Y3Rfc3RyYXRlZ2llcy54bWwgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9lbmdpbmVjb25maWd1cmFibGUvY29uZmlnL2V4YW1wbGUvcGhvbmUvYXVkaW9fcG9saWN5X2VuZ2luZV9wcm9kdWN0X3N0cmF0ZWdpZXMueG1sCmluZGV4IGJjMzI0MTYuLjBkZGY2NmQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2VuZ2luZWNvbmZpZ3VyYWJsZS9jb25maWcvZXhhbXBsZS9waG9uZS9hdWRpb19wb2xpY3lfZW5naW5lX3Byb2R1Y3Rfc3RyYXRlZ2llcy54bWwKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvZW5naW5lY29uZmlndXJhYmxlL2NvbmZpZy9leGFtcGxlL3Bob25lL2F1ZGlvX3BvbGljeV9lbmdpbmVfcHJvZHVjdF9zdHJhdGVnaWVzLnhtbApAQCAtNTcsOSArNTcsNiBAQAogICAgIDxQcm9kdWN0U3RyYXRlZ3kgbmFtZT0iU1RSQVRFR1lfU09OSUZJQ0FUSU9OX1JFU1BFQ1RGVUwiPgogICAgICAgICA8QXR0cmlidXRlc0dyb3VwIHN0cmVhbVR5cGU9IkFVRElPX1NUUkVBTV9OT1RJRklDQVRJT04iIHZvbHVtZUdyb3VwPSJub3RpZmljYXRpb24iPgogICAgICAgICAgICAgPEF0dHJpYnV0ZXM+IDxVc2FnZSB2YWx1ZT0iQVVESU9fVVNBR0VfTk9USUZJQ0FUSU9OIi8+IDwvQXR0cmlidXRlcz4KLSAgICAgICAgICAgIDxBdHRyaWJ1dGVzPiA8VXNhZ2UgdmFsdWU9IkFVRElPX1VTQUdFX05PVElGSUNBVElPTl9DT01NVU5JQ0FUSU9OX1JFUVVFU1QiLz4gPC9BdHRyaWJ1dGVzPgotICAgICAgICAgICAgPEF0dHJpYnV0ZXM+IDxVc2FnZSB2YWx1ZT0iQVVESU9fVVNBR0VfTk9USUZJQ0FUSU9OX0NPTU1VTklDQVRJT05fSU5TVEFOVCIvPiA8L0F0dHJpYnV0ZXM+Ci0gICAgICAgICAgICA8QXR0cmlidXRlcz4gPFVzYWdlIHZhbHVlPSJBVURJT19VU0FHRV9OT1RJRklDQVRJT05fQ09NTVVOSUNBVElPTl9ERUxBWUVEIi8+IDwvQXR0cmlidXRlcz4KICAgICAgICAgICAgIDxBdHRyaWJ1dGVzPiA8VXNhZ2UgdmFsdWU9IkFVRElPX1VTQUdFX05PVElGSUNBVElPTl9FVkVOVCIvPiA8L0F0dHJpYnV0ZXM+CiAgICAgICAgIDwvQXR0cmlidXRlc0dyb3VwPgogICAgIDwvUHJvZHVjdFN0cmF0ZWd5PgpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvZW5naW5lY29uZmlndXJhYmxlL3NyYy9FbmdpbmUuY3BwIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvZW5naW5lY29uZmlndXJhYmxlL3NyYy9FbmdpbmUuY3BwCmluZGV4IGIwYzM3NmEuLjlhNjFhMDUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2VuZ2luZWNvbmZpZ3VyYWJsZS9zcmMvRW5naW5lLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9lbmdpbmVjb25maWd1cmFibGUvc3JjL0VuZ2luZS5jcHAKQEAgLTI5OSw4ICsyOTksMTMgQEAKICAgICBpZiAoZGV2aWNlICE9IG51bGxwdHIpIHsKICAgICAgICAgcmV0dXJuIERldmljZVZlY3RvcihkZXZpY2UpOwogICAgIH0KKyAgICByZXR1cm4gZnJvbUNhY2hlPyBnZXRDYWNoZWREZXZpY2VzKHN0cmF0ZWd5KSA6IGdldERldmljZXNGb3JQcm9kdWN0U3RyYXRlZ3koc3RyYXRlZ3kpOworfQogCi0gICAgcmV0dXJuIGZyb21DYWNoZT8gbURldmljZXNGb3JTdHJhdGVnaWVzLmF0KHN0cmF0ZWd5KSA6IGdldERldmljZXNGb3JQcm9kdWN0U3RyYXRlZ3koc3RyYXRlZ3kpOworRGV2aWNlVmVjdG9yIEVuZ2luZTo6Z2V0Q2FjaGVkRGV2aWNlcyhwcm9kdWN0X3N0cmF0ZWd5X3QgcHMpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EZXZpY2VzRm9yU3RyYXRlZ2llcy5maW5kKHBzKSAhPSBtRGV2aWNlc0ZvclN0cmF0ZWdpZXMuZW5kKCkgPworICAgICAgICAgICAgICAgIG1EZXZpY2VzRm9yU3RyYXRlZ2llcy5hdChwcykgOiBEZXZpY2VWZWN0b3J7fTsKIH0KIAogRGV2aWNlVmVjdG9yIEVuZ2luZTo6Z2V0T3V0cHV0RGV2aWNlc0ZvclN0cmVhbShhdWRpb19zdHJlYW1fdHlwZV90IHN0cmVhbSwgYm9vbCBmcm9tQ2FjaGUpIGNvbnN0CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9lbmdpbmVjb25maWd1cmFibGUvc3JjL0VuZ2luZS5oIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvZW5naW5lY29uZmlndXJhYmxlL3NyYy9FbmdpbmUuaAppbmRleCBkOGUyNzQyLi5mNjY1ZGE1IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9lbmdpbmVjb25maWd1cmFibGUvc3JjL0VuZ2luZS5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2VuZ2luZWNvbmZpZ3VyYWJsZS9zcmMvRW5naW5lLmgKQEAgLTEyNiw2ICsxMjYsNyBAQAogICAgIHN0YXR1c190IGxvYWRBdWRpb1BvbGljeUVuZ2luZUNvbmZpZygpOwogCiAgICAgRGV2aWNlVmVjdG9yIGdldERldmljZXNGb3JQcm9kdWN0U3RyYXRlZ3kocHJvZHVjdF9zdHJhdGVneV90IHN0cmF0ZWd5KSBjb25zdDsKKyAgICBEZXZpY2VWZWN0b3IgZ2V0Q2FjaGVkRGV2aWNlcyhwcm9kdWN0X3N0cmF0ZWd5X3QgcHMpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogUG9saWN5IFBhcmFtZXRlciBNYW5hZ2VyIGhpZGRlbiB0aHJvdWdoIGEgd3JhcHBlci4KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L2VuZ2luZWRlZmF1bHQvY29uZmlnL2V4YW1wbGUvcGhvbmUvYXVkaW9fcG9saWN5X2VuZ2luZV9wcm9kdWN0X3N0cmF0ZWdpZXMueG1sIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvZW5naW5lZGVmYXVsdC9jb25maWcvZXhhbXBsZS9waG9uZS9hdWRpb19wb2xpY3lfZW5naW5lX3Byb2R1Y3Rfc3RyYXRlZ2llcy54bWwKaW5kZXggYmMzMjQxNi4uMGRkZjY2ZCAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvZW5naW5lZGVmYXVsdC9jb25maWcvZXhhbXBsZS9waG9uZS9hdWRpb19wb2xpY3lfZW5naW5lX3Byb2R1Y3Rfc3RyYXRlZ2llcy54bWwKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvZW5naW5lZGVmYXVsdC9jb25maWcvZXhhbXBsZS9waG9uZS9hdWRpb19wb2xpY3lfZW5naW5lX3Byb2R1Y3Rfc3RyYXRlZ2llcy54bWwKQEAgLTU3LDkgKzU3LDYgQEAKICAgICA8UHJvZHVjdFN0cmF0ZWd5IG5hbWU9IlNUUkFURUdZX1NPTklGSUNBVElPTl9SRVNQRUNURlVMIj4KICAgICAgICAgPEF0dHJpYnV0ZXNHcm91cCBzdHJlYW1UeXBlPSJBVURJT19TVFJFQU1fTk9USUZJQ0FUSU9OIiB2b2x1bWVHcm91cD0ibm90aWZpY2F0aW9uIj4KICAgICAgICAgICAgIDxBdHRyaWJ1dGVzPiA8VXNhZ2UgdmFsdWU9IkFVRElPX1VTQUdFX05PVElGSUNBVElPTiIvPiA8L0F0dHJpYnV0ZXM+Ci0gICAgICAgICAgICA8QXR0cmlidXRlcz4gPFVzYWdlIHZhbHVlPSJBVURJT19VU0FHRV9OT1RJRklDQVRJT05fQ09NTVVOSUNBVElPTl9SRVFVRVNUIi8+IDwvQXR0cmlidXRlcz4KLSAgICAgICAgICAgIDxBdHRyaWJ1dGVzPiA8VXNhZ2UgdmFsdWU9IkFVRElPX1VTQUdFX05PVElGSUNBVElPTl9DT01NVU5JQ0FUSU9OX0lOU1RBTlQiLz4gPC9BdHRyaWJ1dGVzPgotICAgICAgICAgICAgPEF0dHJpYnV0ZXM+IDxVc2FnZSB2YWx1ZT0iQVVESU9fVVNBR0VfTk9USUZJQ0FUSU9OX0NPTU1VTklDQVRJT05fREVMQVlFRCIvPiA8L0F0dHJpYnV0ZXM+CiAgICAgICAgICAgICA8QXR0cmlidXRlcz4gPFVzYWdlIHZhbHVlPSJBVURJT19VU0FHRV9OT1RJRklDQVRJT05fRVZFTlQiLz4gPC9BdHRyaWJ1dGVzPgogICAgICAgICA8L0F0dHJpYnV0ZXNHcm91cD4KICAgICA8L1Byb2R1Y3RTdHJhdGVneT4KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L21hbmFnZXJkZWZhdWx0L0F1ZGlvUG9saWN5TWFuYWdlci5jcHAgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9tYW5hZ2VyZGVmYXVsdC9BdWRpb1BvbGljeU1hbmFnZXIuY3BwCmluZGV4IGUzMzQ1MzIuLmQwZjYwNWMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L21hbmFnZXJkZWZhdWx0L0F1ZGlvUG9saWN5TWFuYWdlci5jcHAKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvbWFuYWdlcmRlZmF1bHQvQXVkaW9Qb2xpY3lNYW5hZ2VyLmNwcApAQCAtNTI1LDEwICs1MjUsMTAgQEAKICAgICByZXR1cm4gTk9fRVJST1I7CiB9CiAKLXN0YXR1c190IEF1ZGlvUG9saWN5TWFuYWdlcjo6Z2V0SHdPZmZsb2FkRW5jb2RpbmdGb3JtYXRzU3VwcG9ydGVkRm9yQTJEUCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGF1ZGlvX2Zvcm1hdF90PiAqZm9ybWF0cykKK3N0YXR1c190IEF1ZGlvUG9saWN5TWFuYWdlcjo6Z2V0SHdPZmZsb2FkRm9ybWF0c1N1cHBvcnRlZEZvckJsdWV0b290aE1lZGlhKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fZGV2aWNlc190IGRldmljZSwgc3RkOjp2ZWN0b3I8YXVkaW9fZm9ybWF0X3Q+ICpmb3JtYXRzKQogewotICAgIEFMT0dWKCJnZXRId09mZmxvYWRFbmNvZGluZ0Zvcm1hdHNTdXBwb3J0ZWRGb3JBMkRQKCkiKTsKKyAgICBBTE9HVigiZ2V0SHdPZmZsb2FkRm9ybWF0c1N1cHBvcnRlZEZvckJsdWV0b290aE1lZGlhKCkiKTsKICAgICBzdGF0dXNfdCBzdGF0dXMgPSBOT19FUlJPUjsKICAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8YXVkaW9fZm9ybWF0X3Q+IGZvcm1hdFNldDsKICAgICBzcDxId01vZHVsZT4gcHJpbWFyeU1vZHVsZSA9CkBAIC01MzcsOCArNTM3LDIzIEBACiAgICAgICAgIEFMT0dFKCIlcygpIHVuYWJsZSB0byBnZXQgcHJpbWFyeSBtb2R1bGUiLCBfX2Z1bmNfXyk7CiAgICAgICAgIHJldHVybiBOT19JTklUOwogICAgIH0KKworICAgIERldmljZVR5cGVTZXQgYXVkaW9EZXZpY2VTZXQ7CisKKyAgICBzd2l0Y2goZGV2aWNlKSB7CisgICAgY2FzZSBBVURJT19ERVZJQ0VfT1VUX0JMVUVUT09USF9BMkRQOgorICAgICAgICBhdWRpb0RldmljZVNldCA9IGdldEF1ZGlvRGV2aWNlT3V0QWxsQTJkcFNldCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFVRElPX0RFVklDRV9PVVRfQkxFX0hFQURTRVQ6CisgICAgICAgIGF1ZGlvRGV2aWNlU2V0ID0gZ2V0QXVkaW9EZXZpY2VPdXRBbGxCbGVTZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQUxPR0UoIiVzKCkgZGV2aWNlIHR5cGUgMHglMDh4IG5vdCBzdXBwb3J0ZWQiLCBfX2Z1bmNfXywgZGV2aWNlKTsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICB9CisKICAgICBEZXZpY2VWZWN0b3IgZGVjbGFyZWREZXZpY2VzID0gcHJpbWFyeU1vZHVsZS0+Z2V0RGVjbGFyZWREZXZpY2VzKCkuZ2V0RGV2aWNlc0Zyb21UeXBlcygKLSAgICAgICAgICAgIGdldEF1ZGlvRGV2aWNlT3V0QWxsQTJkcFNldCgpKTsKKyAgICAgICAgICAgIGF1ZGlvRGV2aWNlU2V0KTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGRldmljZSA6IGRlY2xhcmVkRGV2aWNlcykgewogICAgICAgICBmb3JtYXRTZXQuaW5zZXJ0KGRldmljZS0+ZW5jb2RlZEZvcm1hdHMoKS5iZWdpbigpLCBkZXZpY2UtPmVuY29kZWRGb3JtYXRzKCkuZW5kKCkpOwogICAgIH0KQEAgLTIxODIsNyArMjE5Nyw3IEBACiAgICAgfQogCiAgICAgLy8gRXhwbGljaXQgcm91dGluZz8KLSAgICBzcDxEZXZpY2VEZXNjcmlwdG9yPiBleHBsaWNpdFJvdXRpbmdEZXZpY2UgPSAKKyAgICBzcDxEZXZpY2VEZXNjcmlwdG9yPiBleHBsaWNpdFJvdXRpbmdEZXZpY2UgPQogICAgICAgICAgICAgbUF2YWlsYWJsZUlucHV0RGV2aWNlcy5nZXREZXZpY2VGcm9tSWQoKnNlbGVjdGVkRGV2aWNlSWQpOwogCiAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciBtbWFwIGNhcHR1cmU6IGlmIGFuIGlucHV0IElPIGhhbmRsZSBpcyBzcGVjaWZpZWQsIHdlIHJldXNlIHRoaXMgaW5wdXQgaWYKQEAgLTIzNjgsNyArMjM4Myw3IEBACiAgICAgICAgICAgICBwcm9maWxlRmxhZ3MgPSBBVURJT19JTlBVVF9GTEFHX05PTkU7IC8vIHJldHJ5CiAgICAgICAgIH0gZWxzZSB7IC8vIGZhaWwKICAgICAgICAgICAgIEFMT0dXKCIlcyBjb3VsZCBub3QgZmluZCBwcm9maWxlIGZvciBkZXZpY2UgJXMsIHNhbXBsaW5nIHJhdGUgJXUsIGZvcm1hdCAlI3gsICIKLSAgICAgICAgICAgICAgICAgICJjaGFubmVsIG1hc2sgMHglWCwgZmxhZ3MgJSN4IiwgX19mdW5jX18sIGRldmljZS0+dG9TdHJpbmcoKS5jX3N0cigpLCAKKyAgICAgICAgICAgICAgICAgICJjaGFubmVsIG1hc2sgMHglWCwgZmxhZ3MgJSN4IiwgX19mdW5jX18sIGRldmljZS0+dG9TdHJpbmcoKS5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgY29uZmlnLT5zYW1wbGVfcmF0ZSwgY29uZmlnLT5mb3JtYXQsIGNvbmZpZy0+Y2hhbm5lbF9tYXNrLCBmbGFncyk7CiAgICAgICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICAgICAgIH0KQEAgLTUxODksOSArNTIwNCw4IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBtSHdNb2R1bGVzLnB1c2hfYmFjayhod01vZHVsZSk7Ci0gICAgICAgIC8vIG9wZW4gYWxsIG91dHB1dCBzdHJlYW1zIG5lZWRlZCB0byBhY2Nlc3MgYXR0YWNoZWQgZGV2aWNlcwotICAgICAgICAvLyBleGNlcHQgZm9yIGRpcmVjdCBvdXRwdXQgc3RyZWFtcyB0aGF0IGFyZSBvbmx5IG9wZW5lZCB3aGVuIHRoZXkgYXJlIGFjdHVhbGx5Ci0gICAgICAgIC8vIHJlcXVpcmVkIGJ5IGFuIGFwcC4KKyAgICAgICAgLy8gb3BlbiBhbGwgb3V0cHV0IHN0cmVhbXMgbmVlZGVkIHRvIGFjY2VzcyBhdHRhY2hlZCBkZXZpY2VzLgorICAgICAgICAvLyBkaXJlY3Qgb3V0cHV0cyBhcmUgY2xvc2VkIGltbWVkaWF0ZWx5IGFmdGVyIGNoZWNraW5nIHRoZSBhdmFpbGFiaWxpdHkgb2YgYXR0YWNoZWQgZGV2aWNlcwogICAgICAgICAvLyBUaGlzIGFsc28gdmFsaWRhdGVzIG1BdmFpbGFibGVPdXRwdXREZXZpY2VzIGxpc3QKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBvdXRQcm9maWxlIDogaHdNb2R1bGUtPmdldE91dHB1dFByb2ZpbGVzKCkpIHsKICAgICAgICAgICAgIGlmICghb3V0UHJvZmlsZS0+Y2FuT3Blbk5ld0lvKCkpIHsKQEAgLTU1ODgsNyArNTYwMiw3IEBACiAgICAgICAgICAgICB9IC8vIGVuZGlmIGlucHV0ICE9IDAKIAogICAgICAgICAgICAgaWYgKGlucHV0ID09IEFVRElPX0lPX0hBTkRMRV9OT05FKSB7Ci0gICAgICAgICAgICAgICAgQUxPR1coIiVzIGNvdWxkIG5vdCBvcGVuIGlucHV0IGZvciBkZXZpY2UgJXMiLCBfX2Z1bmNfXywgIAorICAgICAgICAgICAgICAgIEFMT0dXKCIlcyBjb3VsZCBub3Qgb3BlbiBpbnB1dCBmb3IgZGV2aWNlICVzIiwgX19mdW5jX18sCiAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZS0+dG9TdHJpbmcoKS5jX3N0cigpKTsKICAgICAgICAgICAgICAgICBwcm9maWxlcy5yZW1vdmVBdChwcm9maWxlX2luZGV4KTsKICAgICAgICAgICAgICAgICBwcm9maWxlX2luZGV4LS07CkBAIC02MDgwLDcgKzYwOTQsOCBAQAogICAgICAgICAgICAgcmV0dXJuIGhhc1ZvaWNlU3RyZWFtKHN0cmVhbXMpICYmIChvdXRwdXREZXNjID09IG1QcmltYXJ5T3V0cHV0IHx8CiAgICAgICAgICAgICAgICAgb3V0cHV0RGVzYy0+aXNBY3RpdmUodG9Wb2x1bWVTb3VyY2UoQVVESU9fU1RSRUFNX1ZPSUNFX0NBTEwpKSkgJiYKICAgICAgICAgICAgICAgICAoaXNJbkNhbGwoKSB8fAotICAgICAgICAgICAgICAgICBtT3V0cHV0cy5pc1N0cmF0ZWd5QWN0aXZlT25TYW1lTW9kdWxlKHByb2R1Y3RTdHJhdGVneSwgb3V0cHV0RGVzYykpOworICAgICAgICAgICAgICAgICBtT3V0cHV0cy5pc1N0cmF0ZWd5QWN0aXZlT25TYW1lTW9kdWxlKHByb2R1Y3RTdHJhdGVneSwgb3V0cHV0RGVzYykpICYmCisgICAgICAgICAgICAgICAgIWlzU3RyZWFtQWN0aXZlKEFVRElPX1NUUkVBTV9FTkZPUkNFRF9BVURJQkxFLCAwKTsKICAgICAgICAgfTsKIAogICAgICAgICAvLyBXaXRoIGxvdy1sYXRlbmN5IHBsYXlpbmcgb24gc3BlYWtlciwgbXVzaWMgb24gV0ZELCB3aGVuIHRoZSBmaXJzdCBsb3ctbGF0ZW5jeQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvbWFuYWdlcmRlZmF1bHQvQXVkaW9Qb2xpY3lNYW5hZ2VyLmggYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9tYW5hZ2VyZGVmYXVsdC9BdWRpb1BvbGljeU1hbmFnZXIuaAppbmRleCA5NjdhYTEwLi4zNzU4NDI5IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9tYW5hZ2VyZGVmYXVsdC9BdWRpb1BvbGljeU1hbmFnZXIuaAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9tYW5hZ2VyZGVmYXVsdC9BdWRpb1BvbGljeU1hbmFnZXIuaApAQCAtMzIwLDggKzMyMCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fZm9ybWF0X3QgKnN1cnJvdW5kRm9ybWF0cyk7CiAgICAgICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0U3Vycm91bmRGb3JtYXRFbmFibGVkKGF1ZGlvX2Zvcm1hdF90IGF1ZGlvRm9ybWF0LCBib29sIGVuYWJsZWQpOwogCi0gICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgZ2V0SHdPZmZsb2FkRW5jb2RpbmdGb3JtYXRzU3VwcG9ydGVkRm9yQTJEUCgKLSAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8YXVkaW9fZm9ybWF0X3Q+ICpmb3JtYXRzKTsKKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRId09mZmxvYWRGb3JtYXRzU3VwcG9ydGVkRm9yQmx1ZXRvb3RoTWVkaWEoCisgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2RldmljZXNfdCBkZXZpY2UsIHN0ZDo6dmVjdG9yPGF1ZGlvX2Zvcm1hdF90PiAqZm9ybWF0cyk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldEFwcFN0YXRlKGF1ZGlvX3BvcnRfaGFuZGxlX3QgcG9ydElkLCBhcHBfc3RhdGVfdCBzdGF0ZSk7CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3NlcnZpY2UvQW5kcm9pZC5icCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3NlcnZpY2UvQW5kcm9pZC5icAppbmRleCAxOTdmMTgzLi5mM2Q0ZjJmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9zZXJ2aWNlL0FuZHJvaWQuYnAKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvc2VydmljZS9BbmRyb2lkLmJwCkBAIC01NSw2ICs1NSw3IEBACiAgICAgICAgICJhdWRpb3BvbGljeS10eXBlcy1haWRsLWNwcCIsCiAgICAgICAgICJjYXB0dXJlX3N0YXRlX2xpc3RlbmVyLWFpZGwtY3BwIiwKICAgICAgICAgImZyYW1ld29yay1wZXJtaXNzaW9uLWFpZGwtY3BwIiwKKyAgICAgICAgInBhY2thZ2VtYW5hZ2VyX2FpZGwtY3BwIiwKICAgICAgICAgInNwYXRpYWxpemVyLWFpZGwtY3BwIiwKICAgICBdLAogCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9zZXJ2aWNlL0F1ZGlvUG9saWN5SW50ZXJmYWNlSW1wbC5jcHAgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9zZXJ2aWNlL0F1ZGlvUG9saWN5SW50ZXJmYWNlSW1wbC5jcHAKaW5kZXggNGJkMTI2MC4uZmYxZTY3NCAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvc2VydmljZS9BdWRpb1BvbGljeUludGVyZmFjZUltcGwuY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3NlcnZpY2UvQXVkaW9Qb2xpY3lJbnRlcmZhY2VJbXBsLmNwcApAQCAtMTg4NSw4ICsxODg1LDggQEAKICAgICByZXR1cm4gU3RhdHVzOjpvaygpOwogfQogCi1TdGF0dXMgQXVkaW9Qb2xpY3lTZXJ2aWNlOjpnZXRId09mZmxvYWRFbmNvZGluZ0Zvcm1hdHNTdXBwb3J0ZWRGb3JBMkRQKAotICAgICAgICBzdGQ6OnZlY3RvcjxtZWRpYTo6YXVkaW86OmNvbW1vbjo6QXVkaW9Gb3JtYXQ+KiBfYWlkbF9yZXR1cm4pIHsKK1N0YXR1cyBBdWRpb1BvbGljeVNlcnZpY2U6OmdldEh3T2ZmbG9hZEZvcm1hdHNTdXBwb3J0ZWRGb3JCbHVldG9vdGhNZWRpYSgKKyAgICAgICAgaW50MzJfdCBkZXZpY2VBaWRsLCBzdGQ6OnZlY3RvcjxtZWRpYTo6YXVkaW86OmNvbW1vbjo6QXVkaW9Gb3JtYXQ+KiBfYWlkbF9yZXR1cm4pIHsKICAgICBzdGQ6OnZlY3RvcjxhdWRpb19mb3JtYXRfdD4gZm9ybWF0czsKIAogICAgIGlmIChtQXVkaW9Qb2xpY3lNYW5hZ2VyID09IE5VTEwpIHsKQEAgLTE4OTQsOCArMTg5NCwxMCBAQAogICAgIH0KICAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwogICAgIEF1dG9DYWxsZXJDbGVhciBhY2M7CisgICAgYXVkaW9fZGV2aWNlc190IGRldmljZSA9IFZBTFVFX09SX1JFVFVSTl9CSU5ERVJfU1RBVFVTKAorICAgICAgICAgICAgYWlkbDJsZWdhY3lfaW50MzJfdF9hdWRpb19kZXZpY2VzX3QoZGV2aWNlQWlkbCkpOwogICAgIFJFVFVSTl9JRl9CSU5ERVJfRVJST1IoYmluZGVyU3RhdHVzRnJvbVN0YXR1c1QoCi0gICAgICAgICAgICBtQXVkaW9Qb2xpY3lNYW5hZ2VyLT5nZXRId09mZmxvYWRFbmNvZGluZ0Zvcm1hdHNTdXBwb3J0ZWRGb3JBMkRQKCZmb3JtYXRzKSkpOworICAgICAgICAgICAgbUF1ZGlvUG9saWN5TWFuYWdlci0+Z2V0SHdPZmZsb2FkRm9ybWF0c1N1cHBvcnRlZEZvckJsdWV0b290aE1lZGlhKGRldmljZSwgJmZvcm1hdHMpKSk7CiAgICAgKl9haWRsX3JldHVybiA9IFZBTFVFX09SX1JFVFVSTl9CSU5ERVJfU1RBVFVTKAogICAgICAgICAgICAgY29udmVydENvbnRhaW5lcjxzdGQ6OnZlY3RvcjxtZWRpYTo6YXVkaW86OmNvbW1vbjo6QXVkaW9Gb3JtYXQ+PigKICAgICAgICAgICAgICAgICAgICAgZm9ybWF0cywKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3NlcnZpY2UvQXVkaW9Qb2xpY3lTZXJ2aWNlLmNwcCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3NlcnZpY2UvQXVkaW9Qb2xpY3lTZXJ2aWNlLmNwcAppbmRleCAxMDJiMzc2Li5jZDgzOTAwIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9zZXJ2aWNlL0F1ZGlvUG9saWN5U2VydmljZS5jcHAKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvc2VydmljZS9BdWRpb1BvbGljeVNlcnZpY2UuY3BwCkBAIC00NzYsNyArNDc2LDcgQEAKICAgICB9CiB9CiAKLXZvaWQgQXVkaW9Qb2xpY3lTZXJ2aWNlOjpOb3RpZmljYXRpb25DbGllbnQ6Om9uQXVkaW9Wb2x1bWVHcm91cENoYW5nZWQodm9sdW1lX2dyb3VwX3QgZ3JvdXAsIAordm9pZCBBdWRpb1BvbGljeVNlcnZpY2U6Ok5vdGlmaWNhdGlvbkNsaWVudDo6b25BdWRpb1ZvbHVtZUdyb3VwQ2hhbmdlZCh2b2x1bWVfZ3JvdXBfdCBncm91cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpCiB7CiAgICAgaWYgKG1BdWRpb1BvbGljeVNlcnZpY2VDbGllbnQgIT0gMCAmJiBtQXVkaW9Wb2x1bWVHcm91cENhbGxiYWNrc0VuYWJsZWQpIHsKQEAgLTEwMzcsNyArMTAzNyw3IEBACiAgICAgICAgIGNhc2UgVFJBTlNBQ1RJT05fcmVtb3ZlVWlkRGV2aWNlQWZmaW5pdGllczoKICAgICAgICAgY2FzZSBUUkFOU0FDVElPTl9zZXRVc2VySWREZXZpY2VBZmZpbml0aWVzOgogICAgICAgICBjYXNlIFRSQU5TQUNUSU9OX3JlbW92ZVVzZXJJZERldmljZUFmZmluaXRpZXM6Ci0gICAgICAgIGNhc2UgVFJBTlNBQ1RJT05fZ2V0SHdPZmZsb2FkRW5jb2RpbmdGb3JtYXRzU3VwcG9ydGVkRm9yQTJEUDoKKyAgICAgICAgY2FzZSBUUkFOU0FDVElPTl9nZXRId09mZmxvYWRGb3JtYXRzU3VwcG9ydGVkRm9yQmx1ZXRvb3RoTWVkaWE6CiAgICAgICAgIGNhc2UgVFJBTlNBQ1RJT05fbGlzdEF1ZGlvVm9sdW1lR3JvdXBzOgogICAgICAgICBjYXNlIFRSQU5TQUNUSU9OX2dldFZvbHVtZUdyb3VwRnJvbUF1ZGlvQXR0cmlidXRlczoKICAgICAgICAgY2FzZSBUUkFOU0FDVElPTl9hY3F1aXJlU291bmRUcmlnZ2VyU2Vzc2lvbjoKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3NlcnZpY2UvQXVkaW9Qb2xpY3lTZXJ2aWNlLmggYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS9zZXJ2aWNlL0F1ZGlvUG9saWN5U2VydmljZS5oCmluZGV4IDI3YzRlMWMuLmQxODkyMjQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3NlcnZpY2UvQXVkaW9Qb2xpY3lTZXJ2aWNlLmgKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvc2VydmljZS9BdWRpb1BvbGljeVNlcnZpY2UuaApAQCAtMTk3LDggKzE5Nyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGJvb2w+KiBmb3JtYXRzRW5hYmxlZCkgb3ZlcnJpZGU7CiAgICAgYmluZGVyOjpTdGF0dXMgZ2V0UmVwb3J0ZWRTdXJyb3VuZEZvcm1hdHMoCiAgICAgICAgICAgICBtZWRpYTo6SW50KiBjb3VudCwgc3RkOjp2ZWN0b3I8bWVkaWE6OmF1ZGlvOjpjb21tb246OkF1ZGlvRm9ybWF0PiogZm9ybWF0cykgb3ZlcnJpZGU7Ci0gICAgYmluZGVyOjpTdGF0dXMgZ2V0SHdPZmZsb2FkRW5jb2RpbmdGb3JtYXRzU3VwcG9ydGVkRm9yQTJEUCgKLSAgICAgICAgICAgIHN0ZDo6dmVjdG9yPG1lZGlhOjphdWRpbzo6Y29tbW9uOjpBdWRpb0Zvcm1hdD4qIF9haWRsX3JldHVybikgb3ZlcnJpZGU7CisgICAgYmluZGVyOjpTdGF0dXMgZ2V0SHdPZmZsb2FkRm9ybWF0c1N1cHBvcnRlZEZvckJsdWV0b290aE1lZGlhKAorICAgICAgICAgICAgaW50MzJfdCBkZXZpY2UsIHN0ZDo6dmVjdG9yPG1lZGlhOjphdWRpbzo6Y29tbW9uOjpBdWRpb0Zvcm1hdD4qIF9haWRsX3JldHVybikgb3ZlcnJpZGU7CiAgICAgYmluZGVyOjpTdGF0dXMgc2V0U3Vycm91bmRGb3JtYXRFbmFibGVkKG1lZGlhOjphdWRpbzo6Y29tbW9uOjpBdWRpb0Zvcm1hdCBhdWRpb0Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlbmFibGVkKSBvdmVycmlkZTsKICAgICBiaW5kZXI6OlN0YXR1cyBzZXRBc3Npc3RhbnRVaWQoaW50MzJfdCB1aWQpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9wb2xpY3kvdGVzdHMvYXVkaW9wb2xpY3ltYW5hZ2VyX3Rlc3RzLmNwcCBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3Rlc3RzL2F1ZGlvcG9saWN5bWFuYWdlcl90ZXN0cy5jcHAKaW5kZXggYTE2YWI3ZC4uOWQyZDJiMyAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvdGVzdHMvYXVkaW9wb2xpY3ltYW5hZ2VyX3Rlc3RzLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS90ZXN0cy9hdWRpb3BvbGljeW1hbmFnZXJfdGVzdHMuY3BwCkBAIC0xMzc1LDcgKzEzNzUsOCBAQAogICAgIGlmICh0eXBlID09IEFVRElPX0RFVklDRV9PVVRfSERNSSkgewogICAgICAgICAvLyBTZXQgZGV2aWNlIGNvbm5lY3Rpb24gc3RhdGUgZmFpbGVkIGR1ZSB0byBubyBkZXZpY2UgZGVzY3JpcHRvciBmb3VuZAogICAgICAgICAvLyBGb3IgSERNSSBjYXNlLCBpdCBpcyBlYXNpZXIgdG8gc2ltdWxhdGUgZGV2aWNlIGRlc2NyaXB0b3Igbm90IGZvdW5kIGVycm9yCi0gICAgICAgIC8vIGJ5IHVzaW5nIGEgdW5kZWNsYXJlZCBlbmNvZGVkIGZvcm1hdC4KKyAgICAgICAgLy8gYnkgdXNpbmcgYW4gZW5jb2RlZCBmb3JtYXQgd2hpY2ggaXNuJ3QgbGlzdGVkIGluIHRoZSAnZW5jb2RlZEZvcm1hdHMnCisgICAgICAgIC8vIGF0dHJpYnV0ZSBmb3IgdGhpcyBkZXZpY2VQb3J0LgogICAgICAgICBBU1NFUlRfRVEoSU5WQUxJRF9PUEVSQVRJT04sIG1NYW5hZ2VyLT5zZXREZXZpY2VDb25uZWN0aW9uU3RhdGUoCiAgICAgICAgICAgICAgICAgdHlwZSwgQVVESU9fUE9MSUNZX0RFVklDRV9TVEFURV9BVkFJTEFCTEUsCiAgICAgICAgICAgICAgICAgYWRkcmVzcy5jX3N0cigpLCBuYW1lLmNfc3RyKCksIEFVRElPX0ZPUk1BVF9NQVRfMl8xKSk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS90ZXN0cy9yZXNvdXJjZXMvdGVzdF9hdWRpb19wb2xpY3lfY29uZmlndXJhdGlvbi54bWwgYi9zZXJ2aWNlcy9hdWRpb3BvbGljeS90ZXN0cy9yZXNvdXJjZXMvdGVzdF9hdWRpb19wb2xpY3lfY29uZmlndXJhdGlvbi54bWwKaW5kZXggODdmMGFiOS4uNDFlZDcwYyAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvdGVzdHMvcmVzb3VyY2VzL3Rlc3RfYXVkaW9fcG9saWN5X2NvbmZpZ3VyYXRpb24ueG1sCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L3Rlc3RzL3Jlc291cmNlcy90ZXN0X2F1ZGlvX3BvbGljeV9jb25maWd1cmF0aW9uLnhtbApAQCAtNTAsNyArNTAsOCBAQAogICAgICAgICAgICAgICAgIDwvZGV2aWNlUG9ydD4KICAgICAgICAgICAgICAgICA8ZGV2aWNlUG9ydCB0YWdOYW1lPSJCdWlsdC1JbiBNaWMiIHR5cGU9IkFVRElPX0RFVklDRV9JTl9CVUlMVElOX01JQyIgcm9sZT0ic291cmNlIj4KICAgICAgICAgICAgICAgICA8L2RldmljZVBvcnQ+Ci0gICAgICAgICAgICAgICAgPGRldmljZVBvcnQgdGFnTmFtZT0iSGRtaSIgdHlwZT0iQVVESU9fREVWSUNFX09VVF9IRE1JIiByb2xlPSJzaW5rIj4KKyAgICAgICAgICAgICAgICA8ZGV2aWNlUG9ydCB0YWdOYW1lPSJIZG1pIiB0eXBlPSJBVURJT19ERVZJQ0VfT1VUX0hETUkiIHJvbGU9InNpbmsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlZEZvcm1hdHM9IkFVRElPX0ZPUk1BVF9BQzMiPgogICAgICAgICAgICAgICAgIDwvZGV2aWNlUG9ydD4KICAgICAgICAgICAgICAgICA8ZGV2aWNlUG9ydCB0YWdOYW1lPSJIZG1pLUluIE1pYyIgdHlwZT0iQVVESU9fREVWSUNFX0lOX0hETUkiIHJvbGU9InNvdXJjZSI+CiAgICAgICAgICAgICAgICAgPC9kZXZpY2VQb3J0PgpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvQ2FtZXJhU2VydmljZS5jcHAgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9DYW1lcmFTZXJ2aWNlLmNwcAppbmRleCA0ZGZiYjZmLi5iNTNhZWMxIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9DYW1lcmFTZXJ2aWNlLmNwcAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9DYW1lcmFTZXJ2aWNlLmNwcApAQCAtNTYwLDYgKzU2MCwxMyBAQAogICAgIG9uVG9yY2hTdGF0dXNDaGFuZ2VkTG9ja2VkKGNhbWVyYUlkLCBuZXdTdGF0dXMsIHN5c3RlbUNhbWVyYUtpbmQpOwogfQogCisKK3ZvaWQgQ2FtZXJhU2VydmljZTo6b25Ub3JjaFN0YXR1c0NoYW5nZWQoY29uc3QgU3RyaW5nOCYgY2FtZXJhSWQsCisgICAgICAgIFRvcmNoTW9kZVN0YXR1cyBuZXdTdGF0dXMsIFN5c3RlbUNhbWVyYUtpbmQgc3lzdGVtQ2FtZXJhS2luZCkgeworICAgIE11dGV4OjpBdXRvbG9jayBhbChtVG9yY2hTdGF0dXNNdXRleCk7CisgICAgb25Ub3JjaFN0YXR1c0NoYW5nZWRMb2NrZWQoY2FtZXJhSWQsIG5ld1N0YXR1cywgc3lzdGVtQ2FtZXJhS2luZCk7Cit9CisKIHZvaWQgQ2FtZXJhU2VydmljZTo6b25Ub3JjaFN0YXR1c0NoYW5nZWRMb2NrZWQoY29uc3QgU3RyaW5nOCYgY2FtZXJhSWQsCiAgICAgICAgIFRvcmNoTW9kZVN0YXR1cyBuZXdTdGF0dXMsIFN5c3RlbUNhbWVyYUtpbmQgc3lzdGVtQ2FtZXJhS2luZCkgewogICAgIEFMT0dJKCIlczogVG9yY2ggc3RhdHVzIGNoYW5nZWQgZm9yIGNhbWVyYUlkPSVzLCBuZXdTdGF0dXM9JWQiLApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvQ2FtZXJhU2VydmljZS5oIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvQ2FtZXJhU2VydmljZS5oCmluZGV4IGJjMmUzNDcuLjY5ZTc1M2IgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL0NhbWVyYVNlcnZpY2UuaAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9DYW1lcmFTZXJ2aWNlLmgKQEAgLTExMCw4ICsxMTAsMTYgQEAKICAgICB2aXJ0dWFsIHZvaWQgICAgICAgIG9uRGV2aWNlU3RhdHVzQ2hhbmdlZChjb25zdCBTdHJpbmc4ICZjYW1lcmFJZCwKICAgICAgICAgICAgIGNvbnN0IFN0cmluZzggJnBoeXNpY2FsQ2FtZXJhSWQsCiAgICAgICAgICAgICBoYXJkd2FyZTo6Y2FtZXJhOjpjb21tb246OlYxXzA6OkNhbWVyYURldmljZVN0YXR1cyBuZXdIYWxTdGF0dXMpIG92ZXJyaWRlOworICAgIC8vIFRoaXMgbWV0aG9kIG1heSBob2xkIENhbWVyYVByb3ZpZGVyTWFuYWdlcjo6bUludGVyZmFjZU11dGV4IGFzIGEgcGFydAorICAgIC8vIG9mIGNhbGxpbmcgZ2V0U3lzdGVtQ2FtZXJhS2luZCgpIGludGVybmFsbHkuIENhcmUgc2hvdWxkIGJlIHRha2VuIG5vdCB0bworICAgIC8vIGRpcmVjdGx5IC8gaW5kaXJlY3RseSBjYWxsIHRoaXMgZnJvbSBjYWxsZXJzIHdobyBhbHNvIGhvbGQKKyAgICAvLyBtSW50ZXJmYWNlTXV0ZXguCiAgICAgdmlydHVhbCB2b2lkICAgICAgICBvblRvcmNoU3RhdHVzQ2hhbmdlZChjb25zdCBTdHJpbmc4JiBjYW1lcmFJZCwKICAgICAgICAgICAgIGhhcmR3YXJlOjpjYW1lcmE6OmNvbW1vbjo6VjFfMDo6VG9yY2hNb2RlU3RhdHVzIG5ld1N0YXR1cykgb3ZlcnJpZGU7CisgICAgLy8gRG9lcyBub3QgaG9sZCBDYW1lcmFQcm92aWRlck1hbmFnZXI6Om1JbnRlcmZhY2VNdXRleC4KKyAgICB2aXJ0dWFsIHZvaWQgICAgICAgIG9uVG9yY2hTdGF0dXNDaGFuZ2VkKGNvbnN0IFN0cmluZzgmIGNhbWVyYUlkLAorICAgICAgICAgICAgaGFyZHdhcmU6OmNhbWVyYTo6Y29tbW9uOjpWMV8wOjpUb3JjaE1vZGVTdGF0dXMgbmV3U3RhdHVzLAorICAgICAgICAgICAgU3lzdGVtQ2FtZXJhS2luZCBraW5kKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgICAgICAgIG9uTmV3UHJvdmlkZXJSZWdpc3RlcmVkKCkgb3ZlcnJpZGU7CiAKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2NvbW1vbi9DYW1lcmFQcm92aWRlck1hbmFnZXIuY3BwIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvY29tbW9uL0NhbWVyYVByb3ZpZGVyTWFuYWdlci5jcHAKaW5kZXggMmY3NGRmOS4uMGNjZTJjYSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvY29tbW9uL0NhbWVyYVByb3ZpZGVyTWFuYWdlci5jcHAKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvY29tbW9uL0NhbWVyYVByb3ZpZGVyTWFuYWdlci5jcHAKQEAgLTE5NjAsMTYgKzE5NjAsMTkgQEAKICAgICAgICAgY29uc3QgaGFyZHdhcmU6OmhpZGxfc3RyaW5nJiBjYW1lcmFEZXZpY2VOYW1lLAogICAgICAgICBUb3JjaE1vZGVTdGF0dXMgbmV3U3RhdHVzKSB7CiAgICAgc3A8U3RhdHVzTGlzdGVuZXI+IGxpc3RlbmVyOworICAgIFN5c3RlbUNhbWVyYUtpbmQgc3lzdGVtQ2FtZXJhS2luZCA9IFN5c3RlbUNhbWVyYUtpbmQ6OlBVQkxJQzsKICAgICBzdGQ6OnN0cmluZyBpZDsKKyAgICBib29sIGtub3duID0gZmFsc2U7CiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtTWFuYWdlci0+bVN0YXR1c0xpc3RlbmVyTXV0ZXgpOwotICAgICAgICBib29sIGtub3duID0gZmFsc2U7CisgICAgICAgIC8vIEhvbGQgbUxvY2sgZm9yIGFjY2Vzc2luZyBtRGV2aWNlcworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtTG9jayk7CiAgICAgICAgIGZvciAoYXV0byYgZGV2aWNlSW5mbyA6IG1EZXZpY2VzKSB7CiAgICAgICAgICAgICBpZiAoZGV2aWNlSW5mby0+bU5hbWUgPT0gY2FtZXJhRGV2aWNlTmFtZSkgewogICAgICAgICAgICAgICAgIEFMT0dJKCJDYW1lcmEgZGV2aWNlICVzIHRvcmNoIHN0YXR1cyBpcyBub3cgJXMiLCBjYW1lcmFEZXZpY2VOYW1lLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICB0b3JjaFN0YXR1c1RvU3RyaW5nKG5ld1N0YXR1cykpOwogICAgICAgICAgICAgICAgIGlkID0gZGV2aWNlSW5mby0+bUlkOwogICAgICAgICAgICAgICAgIGtub3duID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzeXN0ZW1DYW1lcmFLaW5kID0gZGV2aWNlSW5mby0+bVN5c3RlbUNhbWVyYUtpbmQ7CiAgICAgICAgICAgICAgICAgaWYgKFRvcmNoTW9kZVN0YXR1czo6QVZBSUxBQkxFX09OICE9IG5ld1N0YXR1cykgewogICAgICAgICAgICAgICAgICAgICBtTWFuYWdlci0+cmVtb3ZlUmVmKERldmljZU1vZGU6OlRPUkNILCBpZCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTk4MSwxMSArMTk4NCwxOSBAQAogICAgICAgICAgICAgICAgICAgICBtUHJvdmlkZXJOYW1lLmNfc3RyKCksIGNhbWVyYURldmljZU5hbWUuY19zdHIoKSwgbmV3U3RhdHVzKTsKICAgICAgICAgICAgIHJldHVybiBoYXJkd2FyZTo6Vm9pZCgpOwogICAgICAgICB9CisgICAgICAgIC8vIG5vIGxvY2sgbmVlZGVkIHNpbmNlIGxpc3RlbmVyIGlzIHNldCB1cCBvbmx5IG9uY2UgZHVyaW5nCisgICAgICAgIC8vIENhbWVyYVByb3ZpZGVyTWFuYWdlciBpbml0aWFsaXphdGlvbiBhbmQgdGhlbiBuZXZlciBjaGFuZ2VkIHRpbGwgaXQgaXMKKyAgICAgICAgLy8gZGVzdHJ1Y3RlZC4KICAgICAgICAgbGlzdGVuZXIgPSBtTWFuYWdlci0+Z2V0U3RhdHVzTGlzdGVuZXIoKTsKLSAgICB9CisgICAgIH0KICAgICAvLyBDYWxsIHdpdGhvdXQgbG9jayBoZWxkIHRvIGFsbG93IHJlZW50cmFuY3kgaW50byBwcm92aWRlciBtYW5hZ2VyCisgICAgLy8gVGhlIHByb2JsZW0gd2l0aCBob2xkaW5nIG1Mb2NrIGhlcmUgaXMgdGhhdCB3ZQorICAgIC8vIG1pZ2h0IGJlIGxpbWl0aW5nIHJlLWVudHJhbmN5IDogQ2FtZXJhU2VydmljZTo6b25Ub3JjaFN0YXR1c0NoYW5nZWQgY2FsbHMKKyAgICAvLyBiYWNrIGludG8gQ2FtZXJhUHJvdmlkZXJNYW5hZ2VyIHdoaWNoIG1pZ2h0IHRyeSB0byBob2xkIG1Mb2NrIGFnYWluIChlZzoKKyAgICAvLyBmaW5kRGV2aWNlSW5mbywgd2hpY2ggc2hvdWxkIGJlIGhvbGRpbmcgbUxvY2sgd2hpbGUgaXRlcmF0aW5nIHRocm91Z2gKKyAgICAvLyBlYWNoIHByb3ZpZGVyJ3MgZGV2aWNlcykuCiAgICAgaWYgKGxpc3RlbmVyICE9IG51bGxwdHIpIHsKLSAgICAgICAgbGlzdGVuZXItPm9uVG9yY2hTdGF0dXNDaGFuZ2VkKFN0cmluZzgoaWQuY19zdHIoKSksIG5ld1N0YXR1cyk7CisgICAgICAgIGxpc3RlbmVyLT5vblRvcmNoU3RhdHVzQ2hhbmdlZChTdHJpbmc4KGlkLmNfc3RyKCkpLCBuZXdTdGF0dXMsIHN5c3RlbUNhbWVyYUtpbmQpOwogICAgIH0KICAgICByZXR1cm4gaGFyZHdhcmU6OlZvaWQoKTsKIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2NvbW1vbi9DYW1lcmFQcm92aWRlck1hbmFnZXIuaCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2NvbW1vbi9DYW1lcmFQcm92aWRlck1hbmFnZXIuaAppbmRleCBlMzc2M2ExLi5mZGIyNjczIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9jb21tb24vQ2FtZXJhUHJvdmlkZXJNYW5hZ2VyLmgKKysrIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvY29tbW9uL0NhbWVyYVByb3ZpZGVyTWFuYWdlci5oCkBAIC0xNTUsNiArMTU1LDkgQEAKICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmc4ICZwaHlzaWNhbENhbWVyYUlkLAogICAgICAgICAgICAgICAgIGhhcmR3YXJlOjpjYW1lcmE6OmNvbW1vbjo6VjFfMDo6Q2FtZXJhRGV2aWNlU3RhdHVzIG5ld1N0YXR1cykgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgb25Ub3JjaFN0YXR1c0NoYW5nZWQoY29uc3QgU3RyaW5nOCAmY2FtZXJhSWQsCisgICAgICAgICAgICAgICAgaGFyZHdhcmU6OmNhbWVyYTo6Y29tbW9uOjpWMV8wOjpUb3JjaE1vZGVTdGF0dXMgbmV3U3RhdHVzLAorICAgICAgICAgICAgICAgIFN5c3RlbUNhbWVyYUtpbmQga2luZCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgb25Ub3JjaFN0YXR1c0NoYW5nZWQoY29uc3QgU3RyaW5nOCAmY2FtZXJhSWQsCiAgICAgICAgICAgICAgICAgaGFyZHdhcmU6OmNhbWVyYTo6Y29tbW9uOjpWMV8wOjpUb3JjaE1vZGVTdGF0dXMgbmV3U3RhdHVzKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBvbk5ld1Byb3ZpZGVyUmVnaXN0ZXJlZCgpID0gMDsKICAgICB9OwpAQCAtMzI5LDggKzMzMiw2IEBACiAgICAgLy8gQWxsIHByaXZhdGUgbWVtYmVycywgdW5sZXNzIG90aGVyd2lzZSBub3RlZCwgZXhwZWN0IG1JbnRlcmZhY2VNdXRleCB0byBiZSBsb2NrZWQgYmVmb3JlIHVzZQogICAgIG11dGFibGUgc3RkOjptdXRleCBtSW50ZXJmYWNlTXV0ZXg7CiAKLSAgICAvLyB0aGUgc3RhdHVzIGxpc3RlbmVyIHVwZGF0ZSBjYWxsYmFja3Mgd2lsbCBsb2NrIG1TdGF0dXNNdXRleAotICAgIG11dGFibGUgc3RkOjptdXRleCBtU3RhdHVzTGlzdGVuZXJNdXRleDsKICAgICB3cDxTdGF0dXNMaXN0ZW5lcj4gbUxpc3RlbmVyOwogICAgIFNlcnZpY2VJbnRlcmFjdGlvblByb3h5KiBtU2VydmljZVByb3h5OwogCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS90ZXN0cy9DYW1lcmFQcm92aWRlck1hbmFnZXJUZXN0LmNwcCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL3Rlc3RzL0NhbWVyYVByb3ZpZGVyTWFuYWdlclRlc3QuY3BwCmluZGV4IGE3NGZkOWQuLmM4YTZiMzIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL3Rlc3RzL0NhbWVyYVByb3ZpZGVyTWFuYWdlclRlc3QuY3BwCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL3Rlc3RzL0NhbWVyYVByb3ZpZGVyTWFuYWdlclRlc3QuY3BwCkBAIC0yNzQsNiArMjc0LDggQEAKICAgICAgICAgICAgIGhhcmR3YXJlOjpjYW1lcmE6OmNvbW1vbjo6VjFfMDo6Q2FtZXJhRGV2aWNlU3RhdHVzKSBvdmVycmlkZSB7fQogICAgIHZvaWQgb25Ub3JjaFN0YXR1c0NoYW5nZWQoY29uc3QgU3RyaW5nOCAmLAogICAgICAgICAgICAgaGFyZHdhcmU6OmNhbWVyYTo6Y29tbW9uOjpWMV8wOjpUb3JjaE1vZGVTdGF0dXMpIG92ZXJyaWRlIHt9CisgICAgdm9pZCBvblRvcmNoU3RhdHVzQ2hhbmdlZChjb25zdCBTdHJpbmc4ICYsCisgICAgICAgICAgICBoYXJkd2FyZTo6Y2FtZXJhOjpjb21tb246OlYxXzA6OlRvcmNoTW9kZVN0YXR1cywgU3lzdGVtQ2FtZXJhS2luZCkgb3ZlcnJpZGUge30KICAgICB2b2lkIG9uTmV3UHJvdmlkZXJSZWdpc3RlcmVkKCkgb3ZlcnJpZGUge30KIH07CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL21lZGlhY29kZWMvT1dORVJTIGIvc2VydmljZXMvbWVkaWFjb2RlYy9PV05FUlMKaW5kZXggYzcxNmNjZS4uMzQ1M2E3NiAxMDA2NDQKLS0tIGEvc2VydmljZXMvbWVkaWFjb2RlYy9PV05FUlMKKysrIGIvc2VydmljZXMvbWVkaWFjb2RlYy9PV05FUlMKQEAgLTEsMiArMSwzIEBACiBqZWZmdkBnb29nbGUuY29tCi1tYXJjb25lQGdvb2dsZS5jb20KK2Vzc2lja0Bnb29nbGUuY29tCit3b25zaWtAZ29vZ2xlLmNvbQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvbWVkaWFjb2RlYy9hbmRyb2lkLmhhcmR3YXJlLm1lZGlhLm9teEAxLjAtc2VydmljZS5yYyBiL3NlcnZpY2VzL21lZGlhY29kZWMvYW5kcm9pZC5oYXJkd2FyZS5tZWRpYS5vbXhAMS4wLXNlcnZpY2UucmMKaW5kZXggM2VmOWE4NS4uODQ1ZTVjYyAxMDA2NDQKLS0tIGEvc2VydmljZXMvbWVkaWFjb2RlYy9hbmRyb2lkLmhhcmR3YXJlLm1lZGlhLm9teEAxLjAtc2VydmljZS5yYworKysgYi9zZXJ2aWNlcy9tZWRpYWNvZGVjL2FuZHJvaWQuaGFyZHdhcmUubWVkaWEub214QDEuMC1zZXJ2aWNlLnJjCkBAIC0zLDQgKzMsNCBAQAogICAgIHVzZXIgbWVkaWFjb2RlYwogICAgIGdyb3VwIGNhbWVyYSBkcm1ycGMgbWVkaWFkcm0KICAgICBpb3ByaW8gcnQgNAotICAgIHdyaXRlcGlkIC9kZXYvY3B1c2V0L2ZvcmVncm91bmQvdGFza3MKKyAgICB0YXNrX3Byb2ZpbGVzIFByb2Nlc3NDYXBhY2l0eUhpZ2gKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL21lZGlhY29kZWMvcmVnaXN0cmFudC9BbmRyb2lkLmJwIGIvc2VydmljZXMvbWVkaWFjb2RlYy9yZWdpc3RyYW50L0FuZHJvaWQuYnAKaW5kZXggNjk2Yjk2Ny4uZDEwZTMzOSAxMDA2NDQKLS0tIGEvc2VydmljZXMvbWVkaWFjb2RlYy9yZWdpc3RyYW50L0FuZHJvaWQuYnAKKysrIGIvc2VydmljZXMvbWVkaWFjb2RlYy9yZWdpc3RyYW50L0FuZHJvaWQuYnAKQEAgLTcsNyArNyw3IEBACiAgICAgZGVmYXVsdF9hcHBsaWNhYmxlX2xpY2Vuc2VzOiBbImZyYW1ld29ya3NfYXZfc2VydmljZXNfbWVkaWFjb2RlY19saWNlbnNlIl0sCiB9CiAKLWNjX2xpYnJhcnlfc2hhcmVkIHsKK2NjX2xpYnJhcnkgewogICAgIG5hbWU6ICJsaWJtZWRpYV9jb2RlY3NlcnZpY2VyZWdpc3RyYW50IiwKICAgICB2ZW5kb3JfYXZhaWxhYmxlOiB0cnVlLAogICAgIHNyY3M6IFsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL21lZGlhY29kZWMvcmVnaXN0cmFudC9mdXp6ZXIvQW5kcm9pZC5icCBiL3NlcnZpY2VzL21lZGlhY29kZWMvcmVnaXN0cmFudC9mdXp6ZXIvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2FmYmYxCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvbWVkaWFjb2RlYy9yZWdpc3RyYW50L2Z1enplci9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgeworICAgIC8vIFNlZTogaHR0cDovL2dvL2FuZHJvaWQtbGljZW5zZS1mYXEKKyAgICAvLyBBIGxhcmdlLXNjYWxlLWNoYW5nZSBhZGRlZCAnZGVmYXVsdF9hcHBsaWNhYmxlX2xpY2Vuc2VzJyB0byBpbXBvcnQKKyAgICAvLyBhbGwgb2YgdGhlICdsaWNlbnNlX2tpbmRzJyBmcm9tICJmcmFtZXdvcmtzX2F2X3NlcnZpY2VzX21lZGlhY29kZWNfbGljZW5zZSIKKyAgICAvLyB0byBnZXQgdGhlIGJlbG93IGxpY2Vuc2Uga2luZHM6CisgICAgLy8gICBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCisgICAgZGVmYXVsdF9hcHBsaWNhYmxlX2xpY2Vuc2VzOiBbImZyYW1ld29ya3NfYXZfc2VydmljZXNfbWVkaWFjb2RlY19saWNlbnNlIl0sCit9CisKK2NjX2Z1enogeworICAgIG5hbWU6ICJjb2RlY1NlcnZpY2VSZWdpc3RyYW50X2Z1enplciIsCisgICAgc3JjczogWworICAgICAgICAiY29kZWNTZXJ2aWNlUmVnaXN0cmFudF9mdXp6ZXIuY3BwIiwKKyAgICBdLAorICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJsaWJtZWRpYV9jb2RlY3NlcnZpY2VyZWdpc3RyYW50IiwKKyAgICBdLAorICAgIGhlYWRlcl9saWJzOiBbCisgICAgICAgICJsaWJtZWRpYV9oZWFkZXJzIiwKKyAgICBdLAorICAgIGRlZmF1bHRzOiBbCisgICAgICAgICJsaWJjb2RlYzItaGlkbC1kZWZhdWx0cyIsCisgICAgXSwKKyAgICBmdXp6X2NvbmZpZzogeworICAgICAgICBjYzogWworICAgICAgICAgICAgImFuZHJvaWQtbWVkaWEtZnV6emluZy1yZXBvcnRzQGdvb2dsZS5jb20iLAorICAgICAgICBdLAorICAgICAgICBjb21wb25lbnRpZDogMTU1Mjc2LAorICAgIH0sCit9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYWNvZGVjL3JlZ2lzdHJhbnQvZnV6emVyL1JFQURNRS5tZCBiL3NlcnZpY2VzL21lZGlhY29kZWMvcmVnaXN0cmFudC9mdXp6ZXIvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZmEwNjMKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9tZWRpYWNvZGVjL3JlZ2lzdHJhbnQvZnV6emVyL1JFQURNRS5tZApAQCAtMCwwICsxLDU2IEBACisjIEZ1enplciBmb3IgbGlibWVkaWFfY29kZWNzZXJ2aWNlcmVnaXN0cmFudAorCisjIyBQbHVnaW4gRGVzaWduIENvbnNpZGVyYXRpb25zCitUaGUgZnV6emVyIHBsdWdpbiBmb3IgbGlibWVkaWFfY29kZWNzZXJ2aWNlcmVnaXN0cmFudCBpcyBkZXNpZ25lZCBiYXNlZCBvbiB0aGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGlicmFyeSBhbmQgdHJpZXMgdG8gYWNoaWV2ZSB0aGUgZm9sbG93aW5nOgorCisjIyMjIyBNYXhpbWl6ZSBjb2RlIGNvdmVyYWdlCitUaGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFyZSBub3QgaGFyZGNvZGVkLCBidXQgaW5zdGVhZCBzZWxlY3RlZCBiYXNlZCBvbgoraW5jb21pbmcgZGF0YS4gVGhpcyBlbnN1cmVzIG1vcmUgY29kZSBwYXRocyBhcmUgcmVhY2hlZCBieSB0aGUgZnV6emVyLgorCitsaWJtZWRpYV9jb2RlY3NlcnZpY2VyZWdpc3RyYW50IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKzEuIEMyU3RyaW5nIChwYXJhbWV0ZXIgbmFtZTogYGMyU3RyaW5nYCkKKzIuIFdpZHRoIChwYXJhbWV0ZXIgbmFtZTogYHdpZHRoYCkKKzMuIEhlaWdodCAocGFyYW1ldGVyIG5hbWU6IGBoZWlnaHRgKQorNC4gU2FtcGxpbmdSYXRlIChwYXJhbWV0ZXIgbmFtZTogYHNhbXBsaW5nUmF0ZWApCis1LiBDaGFubmVscyAocGFyYW1ldGVyIG5hbWU6IGBjaGFubmVsc2ApCis2LiBTdHJlYW0gKHBhcmFtZXRlciBuYW1lOiBgc3RyZWFtYCkKKworfCBQYXJhbWV0ZXJ8IFZhbGlkIFZhbHVlc3wgQ29uZmlndXJlZCBWYWx1ZXwKK3wtLS0tLS0tLS0tLS0tIHwtLS0tLS0tLS0tLS0tfCAtLS0tLSB8Cit8IGBjMlN0cmluZ2AgfGBTdHJpbmdgIHwgVmFsdWUgb2J0YWluZWQgZnJvbSBGdXp6ZWREYXRhUHJvdmlkZXJ8Cit8IGB3aWR0aGAgfGBVSU5UMzJfTUlOYCB0byBgVUlOVDMyX01BWGAgfCBWYWx1ZSBvYnRhaW5lZCBmcm9tIEZ1enplZERhdGFQcm92aWRlcnwKK3wgYGhlaWdodGAgfGBVSU5UMzJfTUlOYCB0byBgVUlOVDMyX01BWGAgfCBWYWx1ZSBvYnRhaW5lZCBmcm9tIEZ1enplZERhdGFQcm92aWRlcnwKK3wgYHNhbXBsaW5nUmF0ZWAgfGBVSU5UMzJfTUlOYCB0byBgVUlOVDMyX01BWGAgfCBWYWx1ZSBvYnRhaW5lZCBmcm9tIEZ1enplZERhdGFQcm92aWRlcnwKK3wgYGNoYW5uZWxzYCB8YFVJTlQzMl9NSU5gIHRvIGBVSU5UMzJfTUFYYCB8IFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorfCBgc3RyZWFtYCB8YFVJTlQzMl9NSU5gIHRvIGBVSU5UMzJfTUFYYCB8IFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorCitUaGlzIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBwbHVnaW4gaXMgYWx3YXlzIGRldGVybWluaXN0aWMgZm9yIGFueSBnaXZlbiBpbnB1dC4KKworIyMjIyMgTWF4aW1pemUgdXRpbGl6YXRpb24gb2YgaW5wdXQgZGF0YQorVGhlIHBsdWdpbiBmZWVkcyB0aGUgZW50aXJlIGlucHV0IGRhdGEgdG8gdGhlIGxpYm1lZGlhX2NvZGVjc2VydmljZXJlZ2lzdHJhbnQgbW9kdWxlLgorVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHBsdWdpbiB0b2xlcmF0ZXMgYW55IGtpbmQgb2YgaW5wdXQgKGVtcHR5LCBodWdlLAorbWFsZm9ybWVkLCBldGMpIGFuZCBkb2VzbnQgYGV4aXQoKWAgb24gYW55IGlucHV0IGFuZCB0aGVyZWJ5IGluY3JlYXNpbmcgdGhlCitjaGFuY2Ugb2YgaWRlbnRpZnlpbmcgdnVsbmVyYWJpbGl0aWVzLgorCisjIyBCdWlsZAorCitUaGlzIGRlc2NyaWJlcyBzdGVwcyB0byBidWlsZCBjb2RlY1NlcnZpY2VSZWdpc3RyYW50X2Z1enplciBiaW5hcnkuCisKKyMjIyBBbmRyb2lkCisKKyMjIyMgU3RlcHMgdG8gYnVpbGQKK0J1aWxkIHRoZSBmdXp6ZXIKK2BgYAorICAkIG1tIC1qJChucHJvYykgY29kZWNTZXJ2aWNlUmVnaXN0cmFudF9mdXp6ZXIKK2BgYAorIyMjIyBTdGVwcyB0byBydW4KKworVG8gcnVuIG9uIGRldmljZQorYGBgCisgICQgYWRiIHN5bmMgZGF0YQorICAkIGFkYiBzaGVsbCAvZGF0YS9mdXp6LyR7VEFSR0VUX0FSQ0h9L2NvZGVjU2VydmljZVJlZ2lzdHJhbnRfZnV6emVyL2NvZGVjU2VydmljZVJlZ2lzdHJhbnRfZnV6emVyCitgYGAKKworIyMgUmVmZXJlbmNlczoKKyAqIGh0dHA6Ly9sbHZtLm9yZy9kb2NzL0xpYkZ1enplci5odG1sCisgKiBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL29zcy1mdXp6CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYWNvZGVjL3JlZ2lzdHJhbnQvZnV6emVyL2NvZGVjU2VydmljZVJlZ2lzdHJhbnRfZnV6emVyLmNwcCBiL3NlcnZpY2VzL21lZGlhY29kZWMvcmVnaXN0cmFudC9mdXp6ZXIvY29kZWNTZXJ2aWNlUmVnaXN0cmFudF9mdXp6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1OTgzZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9tZWRpYWNvZGVjL3JlZ2lzdHJhbnQvZnV6emVyL2NvZGVjU2VydmljZVJlZ2lzdHJhbnRfZnV6emVyLmNwcApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSAiLi4vQ29kZWNTZXJ2aWNlUmVnaXN0cmFudC5jcHAiCisjaW5jbHVkZSAiZnV6emVyL0Z1enplZERhdGFQcm92aWRlci5oIgorI2luY2x1ZGUgPEMyQ29uZmlnLmg+CisjaW5jbHVkZSA8QzJQYXJhbS5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitjb25zdGV4cHIgY2hhciBrU2VydmljZU5hbWVbXSA9ICJzb2Z0d2FyZSI7CisKK2NsYXNzIENvZGVjU2VydmljZVJlZ2lzdHJhbnRGdXp6ZXIgeworcHVibGljOgorICB2b2lkIHByb2Nlc3MoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUpOworICB+Q29kZWNTZXJ2aWNlUmVnaXN0cmFudEZ1enplcigpIHsKKyAgICBkZWxldGUgbUgyQzI7CisgICAgaWYgKG1JbnB1dFNpemUpIHsKKyAgICAgIGRlbGV0ZSBtSW5wdXRTaXplOworICAgIH0KKyAgICBpZiAobVNhbXBsZVJhdGVJbmZvKSB7CisgICAgICBkZWxldGUgbVNhbXBsZVJhdGVJbmZvOworICAgIH0KKyAgICBpZiAobUNoYW5uZWxDb3VudEluZm8pIHsKKyAgICAgIGRlbGV0ZSBtQ2hhbm5lbENvdW50SW5mbzsKKyAgICB9CisgIH0KKworcHJpdmF0ZToKKyAgdm9pZCBpbml0SDJDMkNvbXBvbmVudFN0b3JlKCk7CisgIHZvaWQgaW52b2tlSDJDMkNvbXBvbmVudFN0b3JlKCk7CisgIHZvaWQgaW52b2tlQ29uZmlnU00oKTsKKyAgdm9pZCBpbnZva2VRdWVyeVNNKCk7CisgIEgyQzJDb21wb25lbnRTdG9yZSAqbUgyQzIgPSBudWxscHRyOworICBDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6aW5wdXQgKm1JbnB1dFNpemUgPSBudWxscHRyOworICBDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOjpvdXRwdXQgKm1TYW1wbGVSYXRlSW5mbyA9IG51bGxwdHI7CisgIEMyU3RyZWFtQ2hhbm5lbENvdW50SW5mbzo6b3V0cHV0ICptQ2hhbm5lbENvdW50SW5mbyA9IG51bGxwdHI7CisgIEMyUGFyYW06OkluZGV4IG1JbmRleCA9IEMyU3RyZWFtUHJvZmlsZUxldmVsSW5mbzo6b3V0cHV0OjpQQVJBTV9UWVBFOworICBDMlN0cmVhbUZyYW1lUmF0ZUluZm86Om91dHB1dCBtRnJhbWVSYXRlOworICBGdXp6ZWREYXRhUHJvdmlkZXIgKm1GRFAgPSBudWxscHRyOworfTsKKwordm9pZCBDb2RlY1NlcnZpY2VSZWdpc3RyYW50RnV6emVyOjppbml0SDJDMkNvbXBvbmVudFN0b3JlKCkgeworICB1c2luZyBuYW1lc3BhY2UgOjphbmRyb2lkOjpoYXJkd2FyZTo6bWVkaWE6OmMyOworICBzaGFyZWRfcHRyPEMyQ29tcG9uZW50U3RvcmU+IHN0b3JlID0KKyAgICAgIGFuZHJvaWQ6OkdldENvZGVjMlBsYXRmb3JtQ29tcG9uZW50U3RvcmUoKTsKKyAgaWYgKCFzdG9yZSkgeworICAgIHJldHVybjsKKyAgfQorICBhbmRyb2lkOjpzcDxWMV8xOjpJQ29tcG9uZW50U3RvcmU+IHN0b3JlVjFfMSA9CisgICAgICBuZXcgVjFfMTo6dXRpbHM6OkNvbXBvbmVudFN0b3JlKHN0b3JlKTsKKyAgaWYgKHN0b3JlVjFfMS0+cmVnaXN0ZXJBc1NlcnZpY2Uoc3RyaW5nKGtTZXJ2aWNlTmFtZSkpICE9IGFuZHJvaWQ6Ok9LKSB7CisgICAgcmV0dXJuOworICB9CisgIHN0cmluZyBjb25zdCBwcmVmZXJyZWRTdG9yZU5hbWUgPSBzdHJpbmcoa1NlcnZpY2VOYW1lKTsKKyAgc3A8SUNvbXBvbmVudFN0b3JlPiBwcmVmZXJyZWRTdG9yZSA9CisgICAgICBJQ29tcG9uZW50U3RvcmU6OmdldFNlcnZpY2UocHJlZmVycmVkU3RvcmVOYW1lLmNfc3RyKCkpOworICBtSDJDMiA9IG5ldyBIMkMyQ29tcG9uZW50U3RvcmUocHJlZmVycmVkU3RvcmUpOworfQorCit2b2lkIENvZGVjU2VydmljZVJlZ2lzdHJhbnRGdXp6ZXI6Omludm9rZUNvbmZpZ1NNKCkgeworICB2ZWN0b3I8QzJQYXJhbSAqPiBjb25maWdQYXJhbXM7CisgIHVpbnQzMl90IHdpZHRoID0gbUZEUC0+Q29uc3VtZUludGVncmFsPHVpbnQzMl90PigpOworICB1aW50MzJfdCBoZWlnaHQgPSBtRkRQLT5Db25zdW1lSW50ZWdyYWw8dWludDMyX3Q+KCk7CisgIHVpbnQzMl90IHNhbXBsaW5nUmF0ZSA9IG1GRFAtPkNvbnN1bWVJbnRlZ3JhbDx1aW50MzJfdD4oKTsKKyAgdWludDMyX3QgY2hhbm5lbHMgPSBtRkRQLT5Db25zdW1lSW50ZWdyYWw8dWludDMyX3Q+KCk7CisgIGlmIChtRkRQLT5Db25zdW1lQm9vbCgpKSB7CisgICAgbUlucHV0U2l6ZSA9IG5ldyBDMlN0cmVhbVBpY3R1cmVTaXplSW5mbzo6aW5wdXQoMHUsIHdpZHRoLCBoZWlnaHQpOworICAgIGNvbmZpZ1BhcmFtcy5wdXNoX2JhY2sobUlucHV0U2l6ZSk7CisgIH0gZWxzZSB7CisgICAgaWYgKG1GRFAtPkNvbnN1bWVCb29sKCkpIHsKKyAgICAgIG1TYW1wbGVSYXRlSW5mbyA9IG5ldyBDMlN0cmVhbVNhbXBsZVJhdGVJbmZvOjpvdXRwdXQoMHUsIHNhbXBsaW5nUmF0ZSk7CisgICAgICBjb25maWdQYXJhbXMucHVzaF9iYWNrKG1TYW1wbGVSYXRlSW5mbyk7CisgICAgfQorICAgIGlmIChtRkRQLT5Db25zdW1lQm9vbCgpKSB7CisgICAgICBtQ2hhbm5lbENvdW50SW5mbyA9IG5ldyBDMlN0cmVhbUNoYW5uZWxDb3VudEluZm86Om91dHB1dCgwdSwgY2hhbm5lbHMpOworICAgICAgY29uZmlnUGFyYW1zLnB1c2hfYmFjayhtQ2hhbm5lbENvdW50SW5mbyk7CisgICAgfQorICB9CisgIHZlY3Rvcjx1bmlxdWVfcHRyPEMyU2V0dGluZ1Jlc3VsdD4+IGZhaWx1cmVzOworICBtSDJDMi0+Y29uZmlnX3NtKGNvbmZpZ1BhcmFtcywgJmZhaWx1cmVzKTsKK30KKwordm9pZCBDb2RlY1NlcnZpY2VSZWdpc3RyYW50RnV6emVyOjppbnZva2VRdWVyeVNNKCkgeworICB2ZWN0b3I8QzJQYXJhbSAqPiBzdGFja1BhcmFtczsKKyAgdmVjdG9yPEMyUGFyYW06OkluZGV4PiBoZWFwUGFyYW1JbmRpY2VzOworICBpZiAobUZEUC0+Q29uc3VtZUJvb2woKSkgeworICAgIHN0YWNrUGFyYW1zID0ge307CisgICAgaGVhcFBhcmFtSW5kaWNlcyA9IHt9OworICB9IGVsc2UgeworICAgIHVpbnQzMl90IHN0cmVhbSA9IG1GRFAtPkNvbnN1bWVJbnRlZ3JhbDx1aW50MzJfdD4oKTsKKyAgICBtRnJhbWVSYXRlLnNldFN0cmVhbShzdHJlYW0pOworICAgIHN0YWNrUGFyYW1zLnB1c2hfYmFjaygmbUZyYW1lUmF0ZSk7CisgICAgaGVhcFBhcmFtSW5kaWNlcy5wdXNoX2JhY2sobUluZGV4KTsKKyAgfQorICB2ZWN0b3I8dW5pcXVlX3B0cjxDMlBhcmFtPj4gaGVhcFBhcmFtczsKKyAgbUgyQzItPnF1ZXJ5X3NtKHN0YWNrUGFyYW1zLCBoZWFwUGFyYW1JbmRpY2VzLCAmaGVhcFBhcmFtcyk7Cit9CisKK3ZvaWQgQ29kZWNTZXJ2aWNlUmVnaXN0cmFudEZ1enplcjo6aW52b2tlSDJDMkNvbXBvbmVudFN0b3JlKCkgeworICBpbml0SDJDMkNvbXBvbmVudFN0b3JlKCk7CisgIHNoYXJlZF9wdHI8QzJDb21wb25lbnQ+IGNvbXBvbmVudDsKKyAgc2hhcmVkX3B0cjxDMkNvbXBvbmVudEludGVyZmFjZT4gaW50ZXJmYWNlOworICBzdHJpbmcgYzJTdHJpbmcgPSBtRkRQLT5Db25zdW1lUmFuZG9tTGVuZ3RoU3RyaW5nKCk7CisgIG1IMkMyLT5jcmVhdGVDb21wb25lbnQoYzJTdHJpbmcsICZjb21wb25lbnQpOworICBtSDJDMi0+Y3JlYXRlSW50ZXJmYWNlKGMyU3RyaW5nLCAmaW50ZXJmYWNlKTsKKyAgaW52b2tlQ29uZmlnU00oKTsKKyAgaW52b2tlUXVlcnlTTSgpOworCisgIHZlY3RvcjxzaGFyZWRfcHRyPEMyUGFyYW1EZXNjcmlwdG9yPj4gcGFyYW1zOworICBtSDJDMi0+cXVlcnlTdXBwb3J0ZWRQYXJhbXNfbmIoJnBhcmFtcyk7CisKKyAgQzJTdG9yZUlvblVzYWdlSW5mbyB1c2FnZUluZm87CisgIHN0ZDo6dmVjdG9yPEMyRmllbGRTdXBwb3J0ZWRWYWx1ZXNRdWVyeT4gcXVlcnkgPSB7CisgICAgICBDMkZpZWxkU3VwcG9ydGVkVmFsdWVzUXVlcnk6OlBvc3NpYmxlKAorICAgICAgICAgIEMyUGFyYW1GaWVsZDo6TWFrZSh1c2FnZUluZm8sIHVzYWdlSW5mby51c2FnZSkpLAorICAgICAgQzJGaWVsZFN1cHBvcnRlZFZhbHVlc1F1ZXJ5OjpQb3NzaWJsZSgKKyAgICAgICAgICBDMlBhcmFtRmllbGQ6Ok1ha2UodXNhZ2VJbmZvLCB1c2FnZUluZm8uY2FwYWNpdHkpKSwKKyAgfTsKKyAgbUgyQzItPnF1ZXJ5U3VwcG9ydGVkVmFsdWVzX3NtKHF1ZXJ5KTsKKworICBtSDJDMi0+Z2V0TmFtZSgpOworICBzaGFyZWRfcHRyPEMyUGFyYW1SZWZsZWN0b3I+IHBhcmFtUmVmbGVjdG9yID0gbUgyQzItPmdldFBhcmFtUmVmbGVjdG9yKCk7CisgIGlmIChwYXJhbVJlZmxlY3RvcikgeworICAgIHBhcmFtUmVmbGVjdG9yLT5kZXNjcmliZShDMkNvbXBvbmVudERvbWFpblNldHRpbmc6OkNPUkVfSU5ERVgpOworICB9CisgIG1IMkMyLT5saXN0Q29tcG9uZW50cygpOworICBzaGFyZWRfcHRyPEMyR3JhcGhpY0J1ZmZlcj4gc3JjOworICBzaGFyZWRfcHRyPEMyR3JhcGhpY0J1ZmZlcj4gZHN0OworICBtSDJDMi0+Y29weUJ1ZmZlcihzcmMsIGRzdCk7Cit9CisKK3ZvaWQgQ29kZWNTZXJ2aWNlUmVnaXN0cmFudEZ1enplcjo6cHJvY2Vzcyhjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSkgeworICBtRkRQID0gbmV3IEZ1enplZERhdGFQcm92aWRlcihkYXRhLCBzaXplKTsKKyAgaW52b2tlSDJDMkNvbXBvbmVudFN0b3JlKCk7CisgIC8qKiBSZWdpc3RlckNvZGVjU2VydmljZXMgaXMgY2FsbGVkIGhlcmUgdG8gaW1wcm92ZSBjb2RlIGNvdmVyYWdlICovCisgIC8qKiBhcyBjdXJyZW50bHkgaXQgaXMgbm90IGNhbGxlZCBieSBjb2RlY1NlcnZpY2VSZWdpc3RyYW50ICAgICAgICovCisgIFJlZ2lzdGVyQ29kZWNTZXJ2aWNlcygpOworICBkZWxldGUgbUZEUDsKK30KKworZXh0ZXJuICJDIiBpbnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSkgeworICBDb2RlY1NlcnZpY2VSZWdpc3RyYW50RnV6emVyIGNvZGVjU2VydmljZVJlZ2lzdHJhbnRGdXp6ZXI7CisgIGNvZGVjU2VydmljZVJlZ2lzdHJhbnRGdXp6ZXIucHJvY2VzcyhkYXRhLCBzaXplKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYWNvZGVjL3NlY2NvbXBfcG9saWN5L21lZGlhc3djb2RlYy1hcm0ucG9saWN5IGIvc2VydmljZXMvbWVkaWFjb2RlYy9zZWNjb21wX3BvbGljeS9tZWRpYXN3Y29kZWMtYXJtLnBvbGljeQppbmRleCA5MDU4ZjEwLi40MWVmY2UwIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9tZWRpYWNvZGVjL3NlY2NvbXBfcG9saWN5L21lZGlhc3djb2RlYy1hcm0ucG9saWN5CisrKyBiL3NlcnZpY2VzL21lZGlhY29kZWMvc2VjY29tcF9wb2xpY3kvbWVkaWFzd2NvZGVjLWFybS5wb2xpY3kKQEAgLTg0LDUgKzg0LDYgQEAKIGdldGdpZDMyOiAxCiBnZXRlZ2lkMzI6IDEKIGdldGdyb3VwczMyOiAxCitzeXNpbmZvOiAxCiAKIEBpbmNsdWRlIC9hcGV4L2NvbS5hbmRyb2lkLm1lZGlhLnN3Y29kZWMvZXRjL3NlY2NvbXBfcG9saWN5L2NvZGVfY292ZXJhZ2UuYXJtLnBvbGljeQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvbWVkaWFjb2RlYy9zZWNjb21wX3BvbGljeS9tZWRpYXN3Y29kZWMtYXJtNjQucG9saWN5IGIvc2VydmljZXMvbWVkaWFjb2RlYy9zZWNjb21wX3BvbGljeS9tZWRpYXN3Y29kZWMtYXJtNjQucG9saWN5CmluZGV4IDRjNTFhOWMuLmUxNTFhMDYgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL21lZGlhY29kZWMvc2VjY29tcF9wb2xpY3kvbWVkaWFzd2NvZGVjLWFybTY0LnBvbGljeQorKysgYi9zZXJ2aWNlcy9tZWRpYWNvZGVjL3NlY2NvbXBfcG9saWN5L21lZGlhc3djb2RlYy1hcm02NC5wb2xpY3kKQEAgLTc4LDUgKzc4LDYgQEAKIGdldGdpZDogMQogZ2V0ZWdpZDogMQogZ2V0Z3JvdXBzOiAxCitzeXNpbmZvOiAxCiAKIEBpbmNsdWRlIC9hcGV4L2NvbS5hbmRyb2lkLm1lZGlhLnN3Y29kZWMvZXRjL3NlY2NvbXBfcG9saWN5L2NvZGVfY292ZXJhZ2UuYXJtNjQucG9saWN5CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYWV4dHJhY3Rvci9PV05FUlMgYi9zZXJ2aWNlcy9tZWRpYWV4dHJhY3Rvci9PV05FUlMKaW5kZXggYzcxNmNjZS4uMmE3NzljMiAxMDA2NDQKLS0tIGEvc2VydmljZXMvbWVkaWFleHRyYWN0b3IvT1dORVJTCisrKyBiL3NlcnZpY2VzL21lZGlhZXh0cmFjdG9yL09XTkVSUwpAQCAtMSwyICsxLDMgQEAKIGplZmZ2QGdvb2dsZS5jb20KLW1hcmNvbmVAZ29vZ2xlLmNvbQorZXNzaWNrQGdvb2dsZS5jb20KK2FxdWlsZXNjYW50YUBnb29nbGUuY29tCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYWV4dHJhY3Rvci9tZWRpYWV4dHJhY3Rvci5yYyBiL3NlcnZpY2VzL21lZGlhZXh0cmFjdG9yL21lZGlhZXh0cmFjdG9yLnJjCmluZGV4IDVmYzI5NDEuLjRmYjUwZDAgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL21lZGlhZXh0cmFjdG9yL21lZGlhZXh0cmFjdG9yLnJjCisrKyBiL3NlcnZpY2VzL21lZGlhZXh0cmFjdG9yL21lZGlhZXh0cmFjdG9yLnJjCkBAIC0zLDQgKzMsNCBAQAogICAgIHVzZXIgbWVkaWFleAogICAgIGdyb3VwIGRybXJwYyBtZWRpYWRybQogICAgIGlvcHJpbyBydCA0Ci0gICAgd3JpdGVwaWQgL2Rldi9jcHVzZXQvZm9yZWdyb3VuZC90YXNrcworICAgIHRhc2tfcHJvZmlsZXMgUHJvY2Vzc0NhcGFjaXR5SGlnaApkaWZmIC0tZ2l0IGEvc2VydmljZXMvbWVkaWFsb2cvQW5kcm9pZC5icCBiL3NlcnZpY2VzL21lZGlhbG9nL0FuZHJvaWQuYnAKaW5kZXggY2ZjNGM0MC4uODA4OGVmMCAxMDA2NDQKLS0tIGEvc2VydmljZXMvbWVkaWFsb2cvQW5kcm9pZC5icAorKysgYi9zZXJ2aWNlcy9tZWRpYWxvZy9BbmRyb2lkLmJwCkBAIC0yNiw2ICsyNiw3IEBACiAgICAgICAgICJsaWJtZWRpYXV0aWxzIiwKICAgICAgICAgImxpYm5ibG9nIiwKICAgICAgICAgImxpYnV0aWxzIiwKKyAgICAgICAgInBhY2thZ2VtYW5hZ2VyX2FpZGwtY3BwIiwKICAgICBdLAogCiAgICAgY2ZsYWdzOiBbCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYW1ldHJpY3MvQW5kcm9pZC5icCBiL3NlcnZpY2VzL21lZGlhbWV0cmljcy9BbmRyb2lkLmJwCmluZGV4IGIyYzk0NjUuLmM5OGQ1ZmMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL21lZGlhbWV0cmljcy9BbmRyb2lkLmJwCisrKyBiL3NlcnZpY2VzL21lZGlhbWV0cmljcy9BbmRyb2lkLmJwCkBAIC0xMTQsNiArMTE0LDcgQEAKICAgICAgICAgImxpYm1lZGlhdXRpbHMiLAogICAgICAgICAibGlidXRpbHMiLAogICAgICAgICAibWVkaWFtZXRyaWNzc2VydmljZS1haWRsLWNwcCIsCisgICAgICAgICJwYWNrYWdlbWFuYWdlcl9haWRsLWNwcCIsCiAgICAgXSwKICAgICBoZWFkZXJfbGliczogWwogICAgICAgICAibGliYXVkaW91dGlsc19oZWFkZXJzIiwKQEAgLTE3Miw2ICsxNzMsNyBAQAogICAgICAgICAibGlic3RhdHNwdWxsIiwKICAgICAgICAgImxpYnN0YXRzc29ja2V0IiwKICAgICAgICAgImxpYnV0aWxzIiwKKyAgICAgICAgInBhY2thZ2VtYW5hZ2VyX2FpZGwtY3BwIiwKICAgICBdLAogCiAgICAgZXhwb3J0X3NoYXJlZF9saWJfaGVhZGVyczogWwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvbWVkaWFtZXRyaWNzL1RyYW5zYWN0aW9uTG9nLmggYi9zZXJ2aWNlcy9tZWRpYW1ldHJpY3MvVHJhbnNhY3Rpb25Mb2cuaAppbmRleCAwY2E0NjM5Li5mZDQyNTE4IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9tZWRpYW1ldHJpY3MvVHJhbnNhY3Rpb25Mb2cuaAorKysgYi9zZXJ2aWNlcy9tZWRpYW1ldHJpY3MvVHJhbnNhY3Rpb25Mb2cuaApAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICAgICAgICAgICAgKytpdCkgewogICAgICAgICAgICAgaWYgKGxsIDw9IDApIGJyZWFrOwogICAgICAgICAgICAgaWYgKHByZWZpeCAhPSBudWxscHRyICYmICFzdGFydHNXaXRoKGl0LT5maXJzdCwgcHJlZml4KSkgYnJlYWs7Ci0gICAgICAgICAgICBhdXRvIFtzLCBsXSA9IGR1bXBNYXBUaW1lSXRlbShpdC0+c2Vjb25kLCBsbCAtIDEsIHNpbmNlTnMsIHByZWZpeCk7CisgICAgICAgICAgICBzdGQ6OnRpZShzLCBsKSA9IGR1bXBNYXBUaW1lSXRlbShpdC0+c2Vjb25kLCBsbCAtIDEsIHNpbmNlTnMsIHByZWZpeCk7CiAgICAgICAgICAgICBpZiAobCA9PSAwKSBjb250aW51ZTsgLy8gZG9uJ3Qgc2hvdyBlbXB0eSBncm91cHMgKGR1ZSB0byBzaW5jZU5zKS4KICAgICAgICAgICAgIHNzIDw8ICIgIiA8PCBpdC0+Zmlyc3QgPDwgIlxuIiA8PCBzOwogICAgICAgICAgICAgbGwgLT0gbCArIDE7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYW1ldHJpY3MvZnV6emVyL0FuZHJvaWQuYnAgYi9zZXJ2aWNlcy9tZWRpYW1ldHJpY3MvZnV6emVyL0FuZHJvaWQuYnAKaW5kZXggYjAzZTUxOC4uOWRhNzI4MiAxMDA2NDQKLS0tIGEvc2VydmljZXMvbWVkaWFtZXRyaWNzL2Z1enplci9BbmRyb2lkLmJwCisrKyBiL3NlcnZpY2VzL21lZGlhbWV0cmljcy9mdXp6ZXIvQW5kcm9pZC5icApAQCAtNTYsNiArNTYsNyBAQAogICAgICAgICAibGlic3RhdHNzb2NrZXQiLAogICAgICAgICAibGlidXRpbHMiLAogICAgICAgICAibWVkaWFtZXRyaWNzc2VydmljZS1haWRsLWNwcCIsCisgICAgICAgICJwYWNrYWdlbWFuYWdlcl9haWRsLWNwcCIsCiAgICAgXSwKIAogICAgIGluY2x1ZGVfZGlyczogWwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvbWVkaWFtZXRyaWNzL2Z1enplci9tZWRpYW1ldHJpY3Nfc2VydmljZV9mdXp6ZXIuY3BwIGIvc2VydmljZXMvbWVkaWFtZXRyaWNzL2Z1enplci9tZWRpYW1ldHJpY3Nfc2VydmljZV9mdXp6ZXIuY3BwCmluZGV4IDhiMGI0NzkuLjA2YWIxNmUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL21lZGlhbWV0cmljcy9mdXp6ZXIvbWVkaWFtZXRyaWNzX3NlcnZpY2VfZnV6emVyLmNwcAorKysgYi9zZXJ2aWNlcy9tZWRpYW1ldHJpY3MvZnV6emVyL21lZGlhbWV0cmljc19zZXJ2aWNlX2Z1enplci5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAKICAgICB2b2lkIGludm9rZUF1ZGlvQW5hbHl0aWNzKGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBzaXplKTsKICAgICB2b2lkIGludm9rZVRpbWVkQWN0aW9uKGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBzaXplKTsKICAgICB2b2lkIHByb2Nlc3MoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUpOworICAgIHN0ZDo6YXRvbWljX2ludCBtVmFsdWUgPSAwOwogfTsKIAogdm9pZCBNZWRpYU1ldHJpY3NTZXJ2aWNlRnV6emVyOjppbnZva2VTdGFydHNXaXRoKGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBzaXplKSB7CkBAIC0zNDIsMTEgKzM0MywxMCBAQAogdm9pZCBNZWRpYU1ldHJpY3NTZXJ2aWNlRnV6emVyOjppbnZva2VUaW1lZEFjdGlvbihjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSkgewogICAgIEZ1enplZERhdGFQcm92aWRlciBmZHAgPSBGdXp6ZWREYXRhUHJvdmlkZXIoZGF0YSwgc2l6ZSk7CiAgICAgYW5kcm9pZDo6bWVkaWFtZXRyaWNzOjpUaW1lZEFjdGlvbiB0aW1lZEFjdGlvbjsKLSAgICBzdGQ6OmF0b21pY19pbnQgdmFsdWUgPSAwOwogCiAgICAgd2hpbGUgKGZkcC5yZW1haW5pbmdfYnl0ZXMoKSkgewogICAgICAgICB0aW1lZEFjdGlvbi5wb3N0SW4oc3RkOjpjaHJvbm86OnNlY29uZHMoZmRwLkNvbnN1bWVJbnRlZ3JhbDxpbnQzMl90PigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFsmdmFsdWVdIHsgKyt2YWx1ZTsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhpc10geyArK21WYWx1ZTsgfSk7CiAgICAgICAgIHRpbWVkQWN0aW9uLnNpemUoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYW1ldHJpY3MvdGVzdHMvQW5kcm9pZC5icCBiL3NlcnZpY2VzL21lZGlhbWV0cmljcy90ZXN0cy9BbmRyb2lkLmJwCmluZGV4IDNiYWY3MzkuLmY0NmZiYWQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL21lZGlhbWV0cmljcy90ZXN0cy9BbmRyb2lkLmJwCisrKyBiL3NlcnZpY2VzL21lZGlhbWV0cmljcy90ZXN0cy9BbmRyb2lkLmJwCkBAIC0zMyw2ICszMyw3IEBACiAgICAgICAgICJsaWJtZWRpYXV0aWxzIiwKICAgICAgICAgImxpYnV0aWxzIiwKICAgICAgICAgIm1lZGlhbWV0cmljc3NlcnZpY2UtYWlkbC1jcHAiLAorICAgICAgICAicGFja2FnZW1hbmFnZXJfYWlkbC1jcHAiLAogICAgIF0sCiAKICAgICBoZWFkZXJfbGliczogWwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvbWVkaWFyZXNvdXJjZW1hbmFnZXIvQW5kcm9pZC5icCBiL3NlcnZpY2VzL21lZGlhcmVzb3VyY2VtYW5hZ2VyL0FuZHJvaWQuYnAKaW5kZXggZjMxMjAyYi4uNWQ4MDc0NCAxMDA2NDQKLS0tIGEvc2VydmljZXMvbWVkaWFyZXNvdXJjZW1hbmFnZXIvQW5kcm9pZC5icAorKysgYi9zZXJ2aWNlcy9tZWRpYXJlc291cmNlbWFuYWdlci9BbmRyb2lkLmJwCkBAIC05MCw3ICs5MCw3IEBACiAgICAgXSwKIAogICAgIHN0YXRpY19saWJzOiBbCi0gICAgICAgICJyZXNvdXJjZW9ic2VydmVyX2FpZGxfaW50ZXJmYWNlLVYxLW5ka19wbGF0Zm9ybSIsCisgICAgICAgICJyZXNvdXJjZW9ic2VydmVyX2FpZGxfaW50ZXJmYWNlLVYxLW5kayIsCiAgICAgXSwKIAogICAgIGluY2x1ZGVfZGlyczogWyJmcmFtZXdvcmtzL2F2L2luY2x1ZGUiXSwKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL21lZGlhcmVzb3VyY2VtYW5hZ2VyL3Rlc3QvQW5kcm9pZC5icCBiL3NlcnZpY2VzL21lZGlhcmVzb3VyY2VtYW5hZ2VyL3Rlc3QvQW5kcm9pZC5icAppbmRleCBlYzRiYTU4Li42MTg2MjZmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9tZWRpYXJlc291cmNlbWFuYWdlci90ZXN0L0FuZHJvaWQuYnAKKysrIGIvc2VydmljZXMvbWVkaWFyZXNvdXJjZW1hbmFnZXIvdGVzdC9BbmRyb2lkLmJwCkBAIC01Niw3ICs1Niw3IEBACiAgICAgdGVzdF9zdWl0ZXM6IFsiZGV2aWNlLXRlc3RzIl0sCiAgICAgc3RhdGljX2xpYnM6IFsKICAgICAgICAgImxpYnJlc291cmNlbWFuYWdlcnNlcnZpY2UiLAotICAgICAgICAicmVzb3VyY2VvYnNlcnZlcl9haWRsX2ludGVyZmFjZS1WMS1uZGtfcGxhdGZvcm0iLAorICAgICAgICAicmVzb3VyY2VvYnNlcnZlcl9haWRsX2ludGVyZmFjZS1WMS1uZGsiLAogICAgIF0sCiAgICAgc2hhcmVkX2xpYnM6IFsKICAgICAgICAgImxpYmJpbmRlciIsCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYXRyYW5zY29kaW5nL0FuZHJvaWQuYnAgYi9zZXJ2aWNlcy9tZWRpYXRyYW5zY29kaW5nL0FuZHJvaWQuYnAKaW5kZXggYTlmZDE0Zi4uZmE1ZWI0ZSAxMDA2NDQKLS0tIGEvc2VydmljZXMvbWVkaWF0cmFuc2NvZGluZy9BbmRyb2lkLmJwCisrKyBiL3NlcnZpY2VzL21lZGlhdHJhbnNjb2RpbmcvQW5kcm9pZC5icApAQCAtNDcsNyArNDcsNyBAQAogICAgIF0sCiAKICAgICBzdGF0aWNfbGliczogWwotICAgICAgICAibWVkaWF0cmFuc2NvZGluZ19haWRsX2ludGVyZmFjZS1uZGtfcGxhdGZvcm0iLAorICAgICAgICAibWVkaWF0cmFuc2NvZGluZ19haWRsX2ludGVyZmFjZS1uZGsiLAogICAgIF0sCiAKICAgICBjZmxhZ3M6IFsKQEAgLTgwLDcgKzgwLDcgQEAKICAgICBdLAogCiAgICAgc3RhdGljX2xpYnM6IFsKLSAgICAgICAgIm1lZGlhdHJhbnNjb2RpbmdfYWlkbF9pbnRlcmZhY2UtbmRrX3BsYXRmb3JtIiwKKyAgICAgICAgIm1lZGlhdHJhbnNjb2RpbmdfYWlkbF9pbnRlcmZhY2UtbmRrIiwKICAgICBdLAogCiAgICAgY2ZsYWdzOiBbCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYXRyYW5zY29kaW5nL3Rlc3RzL0FuZHJvaWQuYnAgYi9zZXJ2aWNlcy9tZWRpYXRyYW5zY29kaW5nL3Rlc3RzL0FuZHJvaWQuYnAKaW5kZXggY2IxODBlYy4uYWUxMzY1NiAxMDA2NDQKLS0tIGEvc2VydmljZXMvbWVkaWF0cmFuc2NvZGluZy90ZXN0cy9BbmRyb2lkLmJwCisrKyBiL3NlcnZpY2VzL21lZGlhdHJhbnNjb2RpbmcvdGVzdHMvQW5kcm9pZC5icApAQCAtMzQsOCArMzQsOCBAQAogICAgIF0sCiAKICAgICBzdGF0aWNfbGliczogWwotICAgICAgICAibWVkaWF0cmFuc2NvZGluZ19haWRsX2ludGVyZmFjZS1uZGtfcGxhdGZvcm0iLAotICAgICAgICAicmVzb3VyY2VtYW5hZ2VyX2FpZGxfaW50ZXJmYWNlLW5ka19wbGF0Zm9ybSIsCisgICAgICAgICJtZWRpYXRyYW5zY29kaW5nX2FpZGxfaW50ZXJmYWNlLW5kayIsCisgICAgICAgICJyZXNvdXJjZW1hbmFnZXJfYWlkbF9pbnRlcmZhY2UtbmRrIiwKICAgICAgICAgImxpYm1lZGlhdHJhbnNjb2RpbmdzZXJ2aWNlIiwKICAgICBdLAogCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9tZWRpYXRyYW5zY29kaW5nL3Rlc3RzL01lZGlhVHJhbnNjb2RpbmdTZXJ2aWNlVGVzdEhlbHBlci5oIGIvc2VydmljZXMvbWVkaWF0cmFuc2NvZGluZy90ZXN0cy9NZWRpYVRyYW5zY29kaW5nU2VydmljZVRlc3RIZWxwZXIuaAppbmRleCAwY2IyZmFkLi44ZTE3ZjU1IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9tZWRpYXRyYW5zY29kaW5nL3Rlc3RzL01lZGlhVHJhbnNjb2RpbmdTZXJ2aWNlVGVzdEhlbHBlci5oCisrKyBiL3NlcnZpY2VzL21lZGlhdHJhbnNjb2RpbmcvdGVzdHMvTWVkaWFUcmFuc2NvZGluZ1NlcnZpY2VUZXN0SGVscGVyLmgKQEAgLTI1OSw5ICsyNTksNyBAQAogc3RhdGljIGNvbnN0ZXhwciBib29sIHN1Y2Nlc3MgPSB0cnVlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIGZhaWwgPSBmYWxzZTsKIAotc3RydWN0IFRlc3RDbGllbnRDYWxsYmFjayA6IHB1YmxpYyBCblRyYW5zY29kaW5nQ2xpZW50Q2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIEV2ZW50VHJhY2tlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgc3RkOjplbmFibGVfc2hhcmVkX2Zyb21fdGhpczxUZXN0Q2xpZW50Q2FsbGJhY2s+IHsKK3N0cnVjdCBUZXN0Q2xpZW50Q2FsbGJhY2sgOiBwdWJsaWMgQm5UcmFuc2NvZGluZ0NsaWVudENhbGxiYWNrLCBwdWJsaWMgRXZlbnRUcmFja2VyIHsKICAgICBUZXN0Q2xpZW50Q2FsbGJhY2soY29uc3QgY2hhciogcGFja2FnZU5hbWUsIGludDMyX3QgaWQpCiAgICAgICAgICAgOiBtQ2xpZW50SWQoaWQpLCBtQ2xpZW50UGlkKFBJRChpZCkpLCBtQ2xpZW50VWlkKFVJRChpZCkpLCBtUGFja2FnZU5hbWUocGFja2FnZU5hbWUpIHsKICAgICAgICAgQUxPR0koIlRlc3RDbGllbnRDYWxsYmFjayAlZCBjcmVhdGVkOiBwaWQgJWQsIHVpZCAlZCIsIGlkLCBQSUQoaWQpLCBVSUQoaWQpKTsKQEAgLTM0OCw4ICszNDYsOCBAQAogICAgICAgICBBTE9HRCgicmVnaXN0ZXJpbmcgJXMgd2l0aCB1aWQgJWQiLCBwYWNrYWdlTmFtZSwgbUNsaWVudFVpZCk7CiAKICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPElUcmFuc2NvZGluZ0NsaWVudD4gY2xpZW50OwotICAgICAgICBTdGF0dXMgc3RhdHVzID0KLSAgICAgICAgICAgICAgICBzZXJ2aWNlLT5yZWdpc3RlckNsaWVudChzaGFyZWRfZnJvbV90aGlzKCksIGtDbGllbnROYW1lLCBwYWNrYWdlTmFtZSwgJmNsaWVudCk7CisgICAgICAgIFN0YXR1cyBzdGF0dXMgPSBzZXJ2aWNlLT5yZWdpc3RlckNsaWVudChyZWY8VGVzdENsaWVudENhbGxiYWNrPigpLCBrQ2xpZW50TmFtZSwgcGFja2FnZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2xpZW50KTsKIAogICAgICAgICBtQ2xpZW50ID0gc3RhdHVzLmlzT2soKSA/IGNsaWVudCA6IG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9taW5pamFpbC9BbmRyb2lkLmJwIGIvc2VydmljZXMvbWluaWphaWwvQW5kcm9pZC5icAppbmRleCAzYTg5ZTEyLi4wMzgxOTdmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9taW5pamFpbC9BbmRyb2lkLmJwCisrKyBiL3NlcnZpY2VzL21pbmlqYWlsL0FuZHJvaWQuYnAKQEAgLTMxLDE3ICszMSw2IEBACiAgICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWyIuIl0sCiB9CiAKLS8vIEJ5IGFkZGluZyAidmVuZG9yX2F2YWlsYWJsZTogdHJ1ZSIgdG8gImxpYmF2c2VydmljZXNfbWluaWphaWwiLCB3ZSBkb24ndAotLy8gbmVlZCB0byBoYXZlICJsaWJhdnNlcnZpY2VzX21pbmlqYWlsX3ZlbmRvciIgYW55IGxvbmdlci4KLS8vICJsaWJhdnNlcnZpY2VzX21pbmlqYWlsX3ZlbmRvciIgd2lsbCBiZSByZW1vdmVkLCBvbmNlIHdlIHJlcGxhY2UgaXQgd2l0aAotLy8gImxpYmF2c2VydmljZXNfbWluaWphaWwiIGluIGFsbCB2ZW5kb3IgbW9kdWxlcy4gKGIvMTQ2MzEzNzEwKQotY2NfbGlicmFyeV9zaGFyZWQgewotICAgIG5hbWU6ICJsaWJhdnNlcnZpY2VzX21pbmlqYWlsX3ZlbmRvciIsCi0gICAgdmVuZG9yOiB0cnVlLAotICAgIGRlZmF1bHRzOiBbImxpYmF2c2VydmljZXNfbWluaWphaWxfZGVmYXVsdHMiXSwKLSAgICBleHBvcnRfaW5jbHVkZV9kaXJzOiBbIi4iXSwKLX0KLQogLy8gVW5pdCB0ZXN0cy4KIGNjX3Rlc3QgewogICAgIG5hbWU6ICJsaWJhdnNlcnZpY2VzX21pbmlqYWlsX3VuaXR0ZXN0IiwKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL21pbmlqYWlsL09XTkVSUyBiL3NlcnZpY2VzL21pbmlqYWlsL09XTkVSUwppbmRleCAxOWY0ZjlmLi45ZWJmNDFlIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9taW5pamFpbC9PV05FUlMKKysrIGIvc2VydmljZXMvbWluaWphaWwvT1dORVJTCkBAIC0xLDIgKzEsMiBAQAogam9yZ2Vsb0Bnb29nbGUuY29tCi1tYXJjb25lQGdvb2dsZS5jb20KK2Vzc2lja0Bnb29nbGUuY29tCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9vYm9lc2VydmljZS9BbmRyb2lkLmJwIGIvc2VydmljZXMvb2JvZXNlcnZpY2UvQW5kcm9pZC5icAppbmRleCA0YzU4MDQwLi4zNTYzZDY2IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9vYm9lc2VydmljZS9BbmRyb2lkLmJwCisrKyBiL3NlcnZpY2VzL29ib2VzZXJ2aWNlL0FuZHJvaWQuYnAKQEAgLTY4LDYgKzY4LDcgQEAKICAgICAgICAgImFhdWRpby1haWRsLWNwcCIsCiAgICAgICAgICJmcmFtZXdvcmstcGVybWlzc2lvbi1haWRsLWNwcCIsCiAgICAgICAgICJsaWJhdWRpb2NsaWVudF9haWRsX2NvbnZlcnNpb24iLAorICAgICAgICAicGFja2FnZW1hbmFnZXJfYWlkbC1jcHAiLAogICAgIF0sCiAKICAgICBleHBvcnRfc2hhcmVkX2xpYl9oZWFkZXJzOiBbCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy90dW5lci9BbmRyb2lkLmJwIGIvc2VydmljZXMvdHVuZXIvQW5kcm9pZC5icAppbmRleCBjZDExYzg4Li4xZGNmZTUzIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy90dW5lci9BbmRyb2lkLmJwCisrKyBiL3NlcnZpY2VzL3R1bmVyL0FuZHJvaWQuYnAKQEAgLTg5LDEzICs4OSwxNCBAQAogICAgICAgICAibGlibG9nIiwKICAgICAgICAgImxpYm1lZGlhIiwKICAgICAgICAgImxpYnV0aWxzIiwKLSAgICAgICAgInR2X3R1bmVyX2FpZGxfaW50ZXJmYWNlLW5ka19wbGF0Zm9ybSIsCi0gICAgICAgICJ0dl90dW5lcl9yZXNvdXJjZV9tYW5hZ2VyX2FpZGxfaW50ZXJmYWNlLW5ka19wbGF0Zm9ybSIsCisgICAgICAgICJwYWNrYWdlbWFuYWdlcl9haWRsLWNwcCIsCisgICAgICAgICJ0dl90dW5lcl9haWRsX2ludGVyZmFjZS1uZGsiLAorICAgICAgICAidHZfdHVuZXJfcmVzb3VyY2VfbWFuYWdlcl9haWRsX2ludGVyZmFjZS1uZGsiLAogICAgICAgICAidHZfdHVuZXJfcmVzb3VyY2VfbWFuYWdlcl9haWRsX2ludGVyZmFjZS1jcHAiLAogICAgIF0sCiAKICAgICBzdGF0aWNfbGliczogWwotICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5jb21tb24uZm1xLVYxLW5ka19wbGF0Zm9ybSIsCisgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLmNvbW1vbi5mbXEtVjEtbmRrIiwKICAgICAgICAgImxpYmFpZGxjb21tb25zdXBwb3J0IiwKICAgICBdLAogCkBAIC0xMjgsMTIgKzEyOSwxMiBAQAogICAgICAgICAibGlibG9nIiwKICAgICAgICAgImxpYnR1bmVyc2VydmljZSIsCiAgICAgICAgICJsaWJ1dGlscyIsCi0gICAgICAgICJ0dl90dW5lcl9yZXNvdXJjZV9tYW5hZ2VyX2FpZGxfaW50ZXJmYWNlLW5ka19wbGF0Zm9ybSIsCisgICAgICAgICJ0dl90dW5lcl9yZXNvdXJjZV9tYW5hZ2VyX2FpZGxfaW50ZXJmYWNlLW5kayIsCiAgICAgICAgICJ0dl90dW5lcl9yZXNvdXJjZV9tYW5hZ2VyX2FpZGxfaW50ZXJmYWNlLWNwcCIsCiAgICAgXSwKIAogICAgIHN0YXRpY19saWJzOiBbCi0gICAgICAgICJ0dl90dW5lcl9haWRsX2ludGVyZmFjZS1uZGtfcGxhdGZvcm0iLAorICAgICAgICAidHZfdHVuZXJfYWlkbF9pbnRlcmZhY2UtbmRrIiwKICAgICBdLAogCiAgICAgaW5pdF9yYzogWyJtZWRpYXR1bmVyLnJjIl0sCg==