ZGlmZiAtLWdpdCBhL2Fzc2V0cy9xcmRfaG9tZXBhZ2UvZW4vZGVmYXVsdF9wYWdlLmh0bWwgYi9hc3NldHMvcXJkX2hvbWVwYWdlL2VuL2RlZmF1bHRfcGFnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDc1ZGJhLi4wMDAwMDAwCi0tLSBhL2Fzc2V0cy9xcmRfaG9tZXBhZ2UvZW4vZGVmYXVsdF9wYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotICAgIDxoZWFkPgotICAgICAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCB1c2VyLXNjYWxhYmxlPW5vIiAvPgotICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1HQjIzMTIiPgotICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gICAgICAgIDwvc2NyaXB0PgotICAgICAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgotICAgICAgICAuaXRlbXt3aWR0aDoxNzBweDsgaGVpZ2h0OjcwcHg7IGZvbnQtc2l6ZToyMnB4fQotICAgICAgICAuaW1ne3dpZHRoOjE4cHg7IGhlaWdodDoxOHB4O30KLSAgICAgICAgPC9zdHlsZT4KLSAgICA8L2hlYWQ+Ci0gICAgPGJvZHkgdG9wbWFyZ2luPTkwPgotICAgIDxwPgotICAgIDx0YWJsZSBhbGlnbj0iY2VudGVyIiBDZWxsUGFkZGluZz0iNSIgd2lkdGg9IjEwJSIgaGVpZ2h0PSIxMCUiPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQ+PGJ1dHRvbiBjbGFzcz0iaXRlbSIgb25DbGljaz0iZGVmYXVsdF9ob21lcGFnZS5sb2FkQm9va21hcmtzKCkiPjxpbWcgY2xhc3M9ImltZyIgc3JjPSIuLi9pbWFnZXMvYm9va21hcmsucG5nIj4mbmJzcCZuYnNwQm9va21hcms8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQ+PGJ1dHRvbiBjbGFzcz0iaXRlbSIgb25DbGljaz0iZGVmYXVsdF9ob21lcGFnZS5sb2FkSGlzdG9yeSgpIj48aW1nIGNsYXNzPSJpbWciIHNyYz0iLi4vaW1hZ2VzL2hpc3RvcnkucG5nIj4mbmJzcCZuYnNwSGlzdG9yeSZuYnNwJm5ic3AmbmJzcCZuYnNwPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDwvcD4KLSAgICA8L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXNzZXRzL3FyZF9ob21lcGFnZS9pbWFnZXMvYm9va21hcmsucG5nIGIvYXNzZXRzL3FyZF9ob21lcGFnZS9pbWFnZXMvYm9va21hcmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmRhYjQ3Li4wMDAwMDAwCi0tLSBhL2Fzc2V0cy9xcmRfaG9tZXBhZ2UvaW1hZ2VzL2Jvb2ttYXJrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Fzc2V0cy9xcmRfaG9tZXBhZ2UvaW1hZ2VzL2hpc3RvcnkucG5nIGIvYXNzZXRzL3FyZF9ob21lcGFnZS9pbWFnZXMvaGlzdG9yeS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlYWFjYzcuLjAwMDAwMDAKLS0tIGEvYXNzZXRzL3FyZF9ob21lcGFnZS9pbWFnZXMvaGlzdG9yeS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hc3NldHMvcXJkX2hvbWVwYWdlL3poX2NuL2RlZmF1bHRfcGFnZS5odG1sIGIvYXNzZXRzL3FyZF9ob21lcGFnZS96aF9jbi9kZWZhdWx0X3BhZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgzMDZlMC4uMDAwMDAwMAotLS0gYS9hc3NldHMvcXJkX2hvbWVwYWdlL3poX2NuL2RlZmF1bHRfcGFnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLSAgICA8aGVhZD4KLSAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KLSAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9R0IyMzEyIj4KLSAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KLSAgICAgICAgLml0ZW17d2lkdGg6MTcwcHg7IGhlaWdodDo3MHB4OyBmb250LXNpemU6MjJweH0KLSAgICAgICAgLmltZ3t3aWR0aDoxOHB4OyBoZWlnaHQ6MThweDt9Ci0gICAgICAgIDwvc3R5bGU+Ci0gICAgPC9oZWFkPgotICAgIDxib2R5IHRvcG1hcmdpbj05MD4KLSAgICA8cD4KLSAgICA8dGFibGUgYWxpZ249ImNlbnRlciIgQ2VsbFBhZGRpbmc9IjUiIHdpZHRoPSIxMCUiIGhlaWdodD0iMTAlIj4KLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkPjxidXR0b24gY2xhc3M9Iml0ZW0iIG9uQ2xpY2s9ImRlZmF1bHRfaG9tZXBhZ2UubG9hZEJvb2ttYXJrcygpIj48aW1nIGNsYXNzPSJpbWciIHNyYz0iLi4vaW1hZ2VzL2Jvb2ttYXJrLnBuZyI+Jm5ic3AmbmJzcMrpJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwx6k8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQ+PGJ1dHRvbiBjbGFzcz0iaXRlbSIgb25DbGljaz0iZGVmYXVsdF9ob21lcGFnZS5sb2FkSGlzdG9yeSgpIj48aW1nIGNsYXNzPSJpbWciIHNyYz0iLi4vaW1hZ2VzL2hpc3RvcnkucG5nIj4mbmJzcCZuYnNwwPrKt7zHwrw8L3RkPgotICAgICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPC9wPgotICAgIDwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9yZXMvcmF3L2Jvb2ttYXJrLnBuZyBiL3Jlcy9yYXcvYm9va21hcmsucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZXMvcmF3L2Jvb2ttYXJrLnBuZwpkaWZmIC0tZ2l0IGEvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl8xLnBuZyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fMS5wbmcKZGlmZiAtLWdpdCBhL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fMTAucG5nIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl8xMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fMTAucG5nCmRpZmYgLS1naXQgYS9yZXMvcmF3L2N1c3RvbV9ib29rbWFya19mYXZpY29uXzExLnBuZyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fMTEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya19mYXZpY29uXzExLnBuZwpkaWZmIC0tZ2l0IGEvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl8xMi5wbmcgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya19mYXZpY29uXzEyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl8xMi5wbmcKZGlmZiAtLWdpdCBhL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fMTMucG5nIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl8xMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fMTMucG5nCmRpZmYgLS1naXQgYS9yZXMvcmF3L2N1c3RvbV9ib29rbWFya19mYXZpY29uXzE0LnBuZyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fMTQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya19mYXZpY29uXzE0LnBuZwpkaWZmIC0tZ2l0IGEvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl8xNS5wbmcgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya19mYXZpY29uXzE1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl8xNS5wbmcKZGlmZiAtLWdpdCBhL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fMTYucG5nIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl8xNi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fMTYucG5nCmRpZmYgLS1naXQgYS9yZXMvcmF3L2N1c3RvbV9ib29rbWFya19mYXZpY29uXzE3LnBuZyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fMTcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya19mYXZpY29uXzE3LnBuZwpkaWZmIC0tZ2l0IGEvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl8xOC5wbmcgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya19mYXZpY29uXzE4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl8xOC5wbmcKZGlmZiAtLWdpdCBhL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fMTkucG5nIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl8xOS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fMTkucG5nCmRpZmYgLS1naXQgYS9yZXMvcmF3L2N1c3RvbV9ib29rbWFya19mYXZpY29uXzIuaWNvIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl8yLmljbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl8yLmljbwpkaWZmIC0tZ2l0IGEvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl8yMC5wbmcgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya19mYXZpY29uXzIwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl8yMC5wbmcKZGlmZiAtLWdpdCBhL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fMy5wbmcgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya19mYXZpY29uXzMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya19mYXZpY29uXzMucG5nCmRpZmYgLS1naXQgYS9yZXMvcmF3L2N1c3RvbV9ib29rbWFya19mYXZpY29uXzQuaWNvIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl80LmljbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl80LmljbwpkaWZmIC0tZ2l0IGEvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl81LnBuZyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fNS5wbmcKZGlmZiAtLWdpdCBhL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fNi5pY28gYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya19mYXZpY29uXzYuaWNvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya19mYXZpY29uXzYuaWNvCmRpZmYgLS1naXQgYS9yZXMvcmF3L2N1c3RvbV9ib29rbWFya19mYXZpY29uXzcucG5nIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl83LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl83LnBuZwpkaWZmIC0tZ2l0IGEvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfZmF2aWNvbl84LnBuZyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fOC5wbmcKZGlmZiAtLWdpdCBhL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX2Zhdmljb25fOS5wbmcgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya19mYXZpY29uXzkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya19mYXZpY29uXzkucG5nCmRpZmYgLS1naXQgYS9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl8xLnBuZyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX3RodW1iXzEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl8xLnBuZwpkaWZmIC0tZ2l0IGEvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfMTAucG5nIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfMTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl8xMC5wbmcKZGlmZiAtLWdpdCBhL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX3RodW1iXzExLnBuZyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX3RodW1iXzExLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfMTEucG5nCmRpZmYgLS1naXQgYS9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl8xMi5wbmcgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl8xMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX3RodW1iXzEyLnBuZwpkaWZmIC0tZ2l0IGEvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfMTMucG5nIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfMTMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl8xMy5wbmcKZGlmZiAtLWdpdCBhL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX3RodW1iXzE0LnBuZyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX3RodW1iXzE0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfMTQucG5nCmRpZmYgLS1naXQgYS9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl8xNS5wbmcgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl8xNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX3RodW1iXzE1LnBuZwpkaWZmIC0tZ2l0IGEvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfMTYucG5nIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfMTYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl8xNi5wbmcKZGlmZiAtLWdpdCBhL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX3RodW1iXzE3LnBuZyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX3RodW1iXzE3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfMTcucG5nCmRpZmYgLS1naXQgYS9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl8xOC5wbmcgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl8xOC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX3RodW1iXzE4LnBuZwpkaWZmIC0tZ2l0IGEvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfMTkucG5nIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfMTkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl8xOS5wbmcKZGlmZiAtLWdpdCBhL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX3RodW1iXzIucG5nIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX3RodW1iXzIucG5nCmRpZmYgLS1naXQgYS9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl8yMC5wbmcgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl8yMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX3RodW1iXzIwLnBuZwpkaWZmIC0tZ2l0IGEvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfMy5wbmcgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl8zLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfMy5wbmcKZGlmZiAtLWdpdCBhL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX3RodW1iXzQucG5nIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX3RodW1iXzQucG5nCmRpZmYgLS1naXQgYS9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl81LnBuZyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX3RodW1iXzUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl81LnBuZwpkaWZmIC0tZ2l0IGEvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfNi5wbmcgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl82LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfNi5wbmcKZGlmZiAtLWdpdCBhL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX3RodW1iXzcucG5nIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfNy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX3RodW1iXzcucG5nCmRpZmYgLS1naXQgYS9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl84LnBuZyBiL3Jlcy9yYXcvY3VzdG9tX2Jvb2ttYXJrX3RodW1iXzgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl84LnBuZwpkaWZmIC0tZ2l0IGEvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfOS5wbmcgYi9yZXMvcmF3L2N1c3RvbV9ib29rbWFya190aHVtYl85LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzL3Jhdy9jdXN0b21fYm9va21hcmtfdGh1bWJfOS5wbmcKZGlmZiAtLWdpdCBhL3Jlcy9yYXcvZGVmYXVsdF9wYWdlLmh0bWwgYi9yZXMvcmF3L2RlZmF1bHRfcGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZXMvcmF3L2RlZmF1bHRfcGFnZS5odG1sCmRpZmYgLS1naXQgYS9yZXMvcmF3L2hpc3RvcnkucG5nIGIvcmVzL3Jhdy9oaXN0b3J5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzL3Jhdy9oaXN0b3J5LnBuZwpkaWZmIC0tZ2l0IGEvcmVzL3ZhbHVlcy16aC1yQ04vZG9ub3R0cmFuc2xhdGUtc2VhcmNoX2VuZ2luZXMueG1sIGIvcmVzL3ZhbHVlcy16aC1yQ04vZG9ub3R0cmFuc2xhdGUtc2VhcmNoX2VuZ2luZXMueG1sCmluZGV4IGI4NWEyYjUuLjVhM2MwYzYgMTAwNjQ0Ci0tLSBhL3Jlcy92YWx1ZXMtemgtckNOL2Rvbm90dHJhbnNsYXRlLXNlYXJjaF9lbmdpbmVzLnhtbAorKysgYi9yZXMvdmFsdWVzLXpoLXJDTi9kb25vdHRyYW5zbGF0ZS1zZWFyY2hfZW5naW5lcy54bWwKQEAgLTI0LDcgKzI0LDYgQEAKICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWFyY2hfZW5naW5lcyIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+CiAgICAgPGl0ZW0+Z29vZ2xlPC9pdGVtPgogICAgIDxpdGVtPmJhaWR1X2NuPC9pdGVtPgotICAgIDxpdGVtPmNtY2NfY248L2l0ZW0+CiAgICAgPGl0ZW0+eWFob29fY248L2l0ZW0+CiAgICAgPGl0ZW0+YmluZ196aF9DTjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CmRpZmYgLS1naXQgYS9yZXMvdmFsdWVzL2FsbF9zZWFyY2hfZW5naW5lcy54bWwgYi9yZXMvdmFsdWVzL2FsbF9zZWFyY2hfZW5naW5lcy54bWwKaW5kZXggNGZlZTEwYS4uMmMxOTlmMyAxMDA2NDQKLS0tIGEvcmVzL3ZhbHVlcy9hbGxfc2VhcmNoX2VuZ2luZXMueG1sCisrKyBiL3Jlcy92YWx1ZXMvYWxsX3NlYXJjaF9lbmdpbmVzLnhtbApAQCAtMTQ4LDIzICsxNDgsNiBAQAogICAgIDxpdGVtPlVURi04PC9pdGVtPgogICAgIDxpdGVtPmh0dHA6Ly9hcGkuYmluZy5jb20vb3Nqc29uLmFzcHg/cXVlcnk9e3NlYXJjaFRlcm1zfSZhbXA7bGFuZ3VhZ2U9e2xhbmd1YWdlfTwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+Ci0gIDxzdHJpbmctYXJyYXkgbmFtZT0iY21jY19jbiIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+Ci0gICAgPGl0ZW0+JiN4NzlGQjsmI3g1MkE4OyYjeDY0MUM7JiN4N0QyMjs8L2l0ZW0+Ci0gICAgPGl0ZW0+cy4xMzkuY29tPC9pdGVtPgotICAgIDxpdGVtPmh0dHA6Ly9zLjEzOS5jb20vZmF2aWNvbi5pY288L2l0ZW0+Ci0gICAgPGl0ZW0+aHR0cDovL3MuMTM5LmNvbS9zZWFyY2guZG8/cT17c2VhcmNoVGVybXN9JmFtcDtjYXRlZ29yeT1kb3dubG9hZGFibGV8d2VifGJyb3dzZWFibGUmYW1wO3RpZD0yMTIzLDIxMjQsMjEyNSwyMTI2JmFtcDtmcj1wb3J0YWxjdXN0b20yPC9pdGVtPgotICAgIDxpdGVtPkdCMjMxMjwvaXRlbT4KLSAgICA8aXRlbT48L2l0ZW0+Ci0gIDwvc3RyaW5nLWFycmF5PgotCi0gIDxzdHJpbmctYXJyYXkgbmFtZT0iY21jYyIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+Ci0gICAgPGl0ZW0+MTM5IFNlYXJjaDwvaXRlbT4KLSAgICA8aXRlbT5zLjEzOS5jb208L2l0ZW0+Ci0gICAgPGl0ZW0+aHR0cDovL3MuMTM5LmNvbS9mYXZpY29uLmljbzwvaXRlbT4KLSAgICA8aXRlbT5odHRwOi8vcy4xMzkuY29tL3NlYXJjaC5kbz9xPXtzZWFyY2hUZXJtc30mYW1wO2NhdGVnb3J5PWRvd25sb2FkYWJsZXx3ZWJ8YnJvd3NlYWJsZSZhbXA7dGlkPTIxMjMsMjEyNCwyMTI1LDIxMjYmYW1wO2ZyPXBvcnRhbGN1c3RvbTI8L2l0ZW0+Ci0gICAgPGl0ZW0+VVRGLTg8L2l0ZW0+Ci0gICAgPGl0ZW0+PC9pdGVtPgotICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ5YWhvb19jbiIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+CiAgICAgPGl0ZW0+JiN4NGUyZDsmI3g1NmZkOyYjeDk2YzU7JiN4ODY0ZTs8L2l0ZW0+CiAgICAgPGl0ZW0+Y24ueWFob28uY29tPC9pdGVtPgpAQCAtNzczLDUgKzc1Niw0NyBAQAogICAgIDxpdGVtPlVURi04PC9pdGVtPgogICAgIDxpdGVtPmh0dHA6Ly9hcGkuYmluZy5jb20vb3Nqc29uLmFzcHg/cXVlcnk9e3NlYXJjaFRlcm1zfSZhbXA7bGFuZ3VhZ2U9e2xhbmd1YWdlfTwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CisKKyAgPCEtLSBDdXN0b20gc2VhcmNoIGVuZ2luZXMgdXNlZCBmcm9tIG92ZXJsYXlzIC0tPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImN1c3RvbV9zZWFyY2hfZW5naW5lXzEiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjdXN0b21fc2VhcmNoX2VuZ2luZV8yIiB0cmFuc2xhdGFibGU9ImZhbHNlIj4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY3VzdG9tX3NlYXJjaF9lbmdpbmVfMyIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImN1c3RvbV9zZWFyY2hfZW5naW5lXzQiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjdXN0b21fc2VhcmNoX2VuZ2luZV81IiB0cmFuc2xhdGFibGU9ImZhbHNlIj4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY3VzdG9tX3NlYXJjaF9lbmdpbmVfNiIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImN1c3RvbV9zZWFyY2hfZW5naW5lXzciIHRyYW5zbGF0YWJsZT0iZmFsc2UiPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjdXN0b21fc2VhcmNoX2VuZ2luZV84IiB0cmFuc2xhdGFibGU9ImZhbHNlIj4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY3VzdG9tX3NlYXJjaF9lbmdpbmVfOSIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImN1c3RvbV9zZWFyY2hfZW5naW5lXzEwIiB0cmFuc2xhdGFibGU9ImZhbHNlIj4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY3VzdG9tX3NlYXJjaF9lbmdpbmVfMTEiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjdXN0b21fc2VhcmNoX2VuZ2luZV8xMiIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImN1c3RvbV9zZWFyY2hfZW5naW5lXzEzIiB0cmFuc2xhdGFibGU9ImZhbHNlIj4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY3VzdG9tX3NlYXJjaF9lbmdpbmVfMTQiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjdXN0b21fc2VhcmNoX2VuZ2luZV8xNSIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImN1c3RvbV9zZWFyY2hfZW5naW5lXzE2IiB0cmFuc2xhdGFibGU9ImZhbHNlIj4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY3VzdG9tX3NlYXJjaF9lbmdpbmVfMTciIHRyYW5zbGF0YWJsZT0iZmFsc2UiPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjdXN0b21fc2VhcmNoX2VuZ2luZV8xOCIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImN1c3RvbV9zZWFyY2hfZW5naW5lXzE5IiB0cmFuc2xhdGFibGU9ImZhbHNlIj4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY3VzdG9tX3NlYXJjaF9lbmdpbmVfMjAiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPgorICA8L3N0cmluZy1hcnJheT4KIDwvcmVzb3VyY2VzPgogCmRpZmYgLS1naXQgYS9yZXMvdmFsdWVzL2Jvb2ttYXJrc19pY29ucy54bWwgYi9yZXMvdmFsdWVzL2Jvb2ttYXJrc19pY29ucy54bWwKaW5kZXggNWQ4ZTg1YS4uOGJiOTgyYyAxMDA2NDQKLS0tIGEvcmVzL3ZhbHVlcy9ib29rbWFya3NfaWNvbnMueG1sCisrKyBiL3Jlcy92YWx1ZXMvYm9va21hcmtzX2ljb25zLnhtbApAQCAtMSwzMyArMSwzMyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDxyZXNvdXJjZXM+Ci0gICAgPGFycmF5IG5hbWU9ImJvb2ttYXJrX3ByZWxvYWRzIj4KLSAgICAgICAgPGl0ZW0+QHJhdy9mYXZpY29uX2dvb2dsZTwvaXRlbT4KLSAgICAgICAgPGl0ZW0+QHJhdy90aHVtYl9nb29nbGU8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkByYXcvZmF2aWNvbl9waWNhc2E8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkByYXcvdGh1bWJfcGljYXNhPC9pdGVtPgotICAgICAgICA8aXRlbT5AcmF3L2Zhdmljb25feWFob288L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkByYXcvdGh1bWJfeWFob288L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkByYXcvZmF2aWNvbl9tc248L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkByYXcvdGh1bWJfbXNuPC9pdGVtPgotICAgICAgICA8aXRlbT5AcmF3L2Zhdmljb25fdHdpdHRlcjwvaXRlbT4KLSAgICAgICAgPGl0ZW0+QHJhdy90aHVtYl90d2l0dGVyPC9pdGVtPgotICAgICAgICA8aXRlbT5AcmF3L2Zhdmljb25fZmFjZWJvb2s8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkByYXcvdGh1bWJfZmFjZWJvb2s8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkByYXcvZmF2aWNvbl93aWtpcGVkaWE8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkByYXcvdGh1bWJfd2lraXBlZGlhPC9pdGVtPgotICAgICAgICA8aXRlbT5AcmF3L2Zhdmljb25fZWJheTwvaXRlbT4KLSAgICAgICAgPGl0ZW0+QHJhdy90aHVtYl9lYmF5PC9pdGVtPgotICAgICAgICA8aXRlbT5AcmF3L2Zhdmljb25fY25uPC9pdGVtPgotICAgICAgICA8aXRlbT5AcmF3L3RodW1iX2NubjwvaXRlbT4KLSAgICAgICAgPGl0ZW0+QHJhdy9mYXZpY29uX255dGltZXM8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkByYXcvdGh1bWJfbnl0aW1lczwvaXRlbT4KLSAgICAgICAgPGl0ZW0+QHJhdy9mYXZpY29uX2VzcG48L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkByYXcvdGh1bWJfZXNwbjwvaXRlbT4KLSAgICAgICAgPGl0ZW0+QHJhdy9mYXZpY29uX2FtYXpvbjwvaXRlbT4KLSAgICAgICAgPGl0ZW0+QHJhdy90aHVtYl9hbWF6b248L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkByYXcvZmF2aWNvbl93ZWF0aGVyY2hhbm5lbDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+QHJhdy90aHVtYl93ZWF0aGVyY2hhbm5lbDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+QHJhdy9mYXZpY29uX2JiYzwvaXRlbT4KLSAgICAgICAgPGl0ZW0+QHJhdy90aHVtYl9iYmM8L2l0ZW0+Ci0gICAgPC9hcnJheT4KKyAgICA8c3RyaW5nLWFycmF5IG5hbWU9ImJvb2ttYXJrX3ByZWxvYWRzIj4KKyAgICAgICAgPGl0ZW0+ZmF2aWNvbl9nb29nbGU8L2l0ZW0+CisgICAgICAgIDxpdGVtPnRodW1iX2dvb2dsZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0+ZmF2aWNvbl9waWNhc2E8L2l0ZW0+CisgICAgICAgIDxpdGVtPnRodW1iX3BpY2FzYTwvaXRlbT4KKyAgICAgICAgPGl0ZW0+ZmF2aWNvbl95YWhvbzwvaXRlbT4KKyAgICAgICAgPGl0ZW0+dGh1bWJfeWFob288L2l0ZW0+CisgICAgICAgIDxpdGVtPmZhdmljb25fbXNuPC9pdGVtPgorICAgICAgICA8aXRlbT50aHVtYl9tc248L2l0ZW0+CisgICAgICAgIDxpdGVtPmZhdmljb25fdHdpdHRlcjwvaXRlbT4KKyAgICAgICAgPGl0ZW0+dGh1bWJfdHdpdHRlcjwvaXRlbT4KKyAgICAgICAgPGl0ZW0+ZmF2aWNvbl9mYWNlYm9vazwvaXRlbT4KKyAgICAgICAgPGl0ZW0+dGh1bWJfZmFjZWJvb2s8L2l0ZW0+CisgICAgICAgIDxpdGVtPmZhdmljb25fd2lraXBlZGlhPC9pdGVtPgorICAgICAgICA8aXRlbT50aHVtYl93aWtpcGVkaWE8L2l0ZW0+CisgICAgICAgIDxpdGVtPmZhdmljb25fZWJheTwvaXRlbT4KKyAgICAgICAgPGl0ZW0+dGh1bWJfZWJheTwvaXRlbT4KKyAgICAgICAgPGl0ZW0+ZmF2aWNvbl9jbm48L2l0ZW0+CisgICAgICAgIDxpdGVtPnRodW1iX2NubjwvaXRlbT4KKyAgICAgICAgPGl0ZW0+ZmF2aWNvbl9ueXRpbWVzPC9pdGVtPgorICAgICAgICA8aXRlbT50aHVtYl9ueXRpbWVzPC9pdGVtPgorICAgICAgICA8aXRlbT5mYXZpY29uX2VzcG48L2l0ZW0+CisgICAgICAgIDxpdGVtPnRodW1iX2VzcG48L2l0ZW0+CisgICAgICAgIDxpdGVtPmZhdmljb25fYW1hem9uPC9pdGVtPgorICAgICAgICA8aXRlbT50aHVtYl9hbWF6b248L2l0ZW0+CisgICAgICAgIDxpdGVtPmZhdmljb25fd2VhdGhlcmNoYW5uZWw8L2l0ZW0+CisgICAgICAgIDxpdGVtPnRodW1iX3dlYXRoZXJjaGFubmVsPC9pdGVtPgorICAgICAgICA8aXRlbT5mYXZpY29uX2JiYzwvaXRlbT4KKyAgICAgICAgPGl0ZW0+dGh1bWJfYmJjPC9pdGVtPgorICAgIDwvc3RyaW5nLWFycmF5PgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9yZXMvdmFsdWVzL2Jvb2xzLnhtbCBiL3Jlcy92YWx1ZXMvYm9vbHMueG1sCmluZGV4IGNjOGZmNWEuLjlmZjMwMTAgMTAwNjQ0Ci0tLSBhL3Jlcy92YWx1ZXMvYm9vbHMueG1sCisrKyBiL3Jlcy92YWx1ZXMvYm9vbHMueG1sCkBAIC0xOSw0ICsxOSw5IEBACiAgICAgPCEtLSBCcm93c2VyIG1lbnUgdG9nZ2xlcyAtLT4KICAgICA8Ym9vbCBuYW1lPSJtZW51X3Nob3dfbmF2aWdhdGlvbiI+dHJ1ZTwvYm9vbD4KICAgICA8Ym9vbCBuYW1lPSJtZW51X3Nob3dfYm9va21hcmtzIj50cnVlPC9ib29sPgorICAgIDwhLS0gQ2FycmllciBTcGVjaWZpYyBWYWx1ZXMgLS0+CisgICAgPGJvb2wgbmFtZT0id2FwMmVzdG9yZSI+ZmFsc2U8L2Jvb2w+CisgICAgPGJvb2wgbmFtZT0iZHJtX3VwbG9hZHMiPmZhbHNlPC9ib29sPgorICAgIDxib29sIG5hbWU9Im5ldHdvcmtfbm90aWZpZXIiPmZhbHNlPC9ib29sPgorICAgIDxib29sIG5hbWU9ImRlZl9kaXNhYmxlX2hpc3RvcnkiPmZhbHNlPC9ib29sPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9yZXMvdmFsdWVzL2Rvbm90dHJhbnNsYXRlLXNlYXJjaF9lbmdpbmVzLnhtbCBiL3Jlcy92YWx1ZXMvZG9ub3R0cmFuc2xhdGUtc2VhcmNoX2VuZ2luZXMueG1sCmluZGV4IDA4MWVmYzAuLmY4MzUyNmIgMTAwNjQ0Ci0tLSBhL3Jlcy92YWx1ZXMvZG9ub3R0cmFuc2xhdGUtc2VhcmNoX2VuZ2luZXMueG1sCisrKyBiL3Jlcy92YWx1ZXMvZG9ub3R0cmFuc2xhdGUtc2VhcmNoX2VuZ2luZXMueG1sCkBAIC0yNCw3ICsyNCw2IEBACiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VhcmNoX2VuZ2luZXMiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPgogICAgIDxpdGVtPmdvb2dsZTwvaXRlbT4KICAgICA8aXRlbT5iYWlkdTwvaXRlbT4KLSAgICA8aXRlbT5jbWNjPC9pdGVtPgogICAgIDxpdGVtPnlhaG9vPC9pdGVtPgogICAgIDxpdGVtPmJpbmc8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgpkaWZmIC0tZ2l0IGEvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKaW5kZXggZTQ3MThiZi4uNGM4MDMzZiAxMDA2NDQKLS0tIGEvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAorKysgYi9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCkBAIC03OTcsNiArNzk3LDEyIEBACiAgICAgPCEtLSBEbyBub3QgdHJhbnNsYXRlLiAgVGVzdGluZyBvbmx5IC0tPgogICAgIDxzdHJpbmcgbmFtZT0iZHVtcF9uYXYiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPkR1bXAgbmF2aWdhdGlvbiBjYWNoZTwvc3RyaW5nPgogCisgICAgPCEtLSBJbnRlbnRpb25hbCBlbXB0eSBlbGVtZW50cyAtIHVzZWQgZm9yIG92ZXJsYXkgZmVhdHVyZSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZl93aWZpX2Jyb3dzZXJfaW50ZXJhY3Rpb25fcmVtaW5kX3R5cGUiPjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmX2FjdGlvbl93aWZpX3NlbGVjdGlvbl9kYXRhX2Nvbm5lY3Rpb25zIj48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZl9sYW5kaW5nX3BhZ2UiPjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmX3VzZXJhZ2VudCI+PC9zdHJpbmc+CisKICAgICA8IS0tIFRoZSBkZWZhdWx0IGhvbWVwYWdlLiAtLT4KICAgICA8c3RyaW5nIG5hbWU9ImhvbWVwYWdlX2Jhc2UiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPgogICAgICAgICBodHRwczovL3d3dy5nb29nbGUuY29tL3dlYmhwP2NsaWVudD17Q0lEfSZhbXA7c291cmNlPWFuZHJvaWQtaG9tZTwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvQWRkQm9va21hcmtGb2xkZXIuamF2YSBiL3NyYy9jb20vYW5kcm9pZC9icm93c2VyL0FkZEJvb2ttYXJrRm9sZGVyLmphdmEKaW5kZXggNGE5YzEzYy4uYzZkYzY1MyAxMDA2NDQKLS0tIGEvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvQWRkQm9va21hcmtGb2xkZXIuamF2YQorKysgYi9zcmMvY29tL2FuZHJvaWQvYnJvd3Nlci9BZGRCb29rbWFya0ZvbGRlci5qYXZhCkBAIC02MDUsNyArNjA1LDYgQEAKICAgICAgICAgbUZha2VUaXRsZS5zZXRUZXh0KHRoaXMuZ2V0U3RyaW5nKFIuc3RyaW5nLm5ld19mb2xkZXIpKTsKIAogICAgICAgICBtVGl0bGUgPSAoRWRpdFRleHQpIGZpbmRWaWV3QnlJZChSLmlkLnRpdGxlKTsKLSAgICAgICAgLy8gYWRkIGZvciBjbWNjIHRlc3QgYWJvdXQgd2FyaW5nIGxpbWl0IG9mIGVkaXQgdGV4dAogICAgICAgICBCcm93c2VyVXRpbHMubWF4TGVuZ3RoRmlsdGVyKEFkZEJvb2ttYXJrRm9sZGVyLnRoaXMsIG1UaXRsZSwgQnJvd3NlclV0aWxzLkZJTEVOQU1FX01BWF9MRU5HVEgpOwogCiAgICAgICAgIG1UaXRsZS5zZXRUZXh0KHRpdGxlKTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vYW5kcm9pZC9icm93c2VyL0Jyb3dzZXJTZXR0aW5ncy5qYXZhIGIvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvQnJvd3NlclNldHRpbmdzLmphdmEKaW5kZXggMGU0ZmJhNi4uMDI4MTE2NyAxMDA2NDQKLS0tIGEvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvQnJvd3NlclNldHRpbmdzLmphdmEKKysrIGIvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvQnJvd3NlclNldHRpbmdzLmphdmEKQEAgLTIxLDE1ICsyMSwxNCBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5TaGFyZWRQcmVmZXJlbmNlczsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2hhcmVkUHJlZmVyZW5jZXMuRWRpdG9yOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5TaGFyZWRQcmVmZXJlbmNlcy5PblNoYXJlZFByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkFzc2V0TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm5ldC5Db25uZWN0aXZpdHlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtJbmZvOwogaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CiBpbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuQnJvd3NlcjsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOworaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkRpc3BsYXlNZXRyaWNzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC53ZWJraXQuV2ViSWNvbkRhdGFiYXNlOwogaW1wb3J0IGFuZHJvaWQud2Via2l0LldlYlN0b3JhZ2U7CiBpbXBvcnQgYW5kcm9pZC53ZWJraXQuV2ViVmlld0RhdGFiYXNlOwpAQCAtNDEsNyArNDAsNiBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLmJyb3dzZXIuc2VhcmNoLlNlYXJjaEVuZ2luZTsKIGltcG9ydCBjb20uYW5kcm9pZC5icm93c2VyLnNlYXJjaC5TZWFyY2hFbmdpbmVzOwogCi1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmxhbmcucmVmLldlYWtSZWZlcmVuY2U7CiBpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwogaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwpAQCAtMTM1LDkgKzEzMyw2IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgc0ZhY3RvcnlSZXNldFVybDsKIAotICAgIC8vIGFkZCBmb3IgY2FycmllciBmZWF0dXJlCi0gICAgcHJpdmF0ZSBzdGF0aWMgQ29udGV4dCBzUmVzUGFja2FnZUN0eDsKLQogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBpbml0aWFsaXplKGZpbmFsIENvbnRleHQgY29udGV4dCkgewogICAgICAgICBzSW5zdGFuY2UgPSBuZXcgQnJvd3NlclNldHRpbmdzKGNvbnRleHQpOwogICAgIH0KQEAgLTE1MiwxNSArMTQ3LDYgQEAKICAgICAgICAgbUF1dG9maWxsSGFuZGxlciA9IG5ldyBBdXRvZmlsbEhhbmRsZXIobUNvbnRleHQpOwogICAgICAgICBtTWFuYWdlZFNldHRpbmdzID0gbmV3IExpbmtlZExpc3Q8V2Vha1JlZmVyZW5jZTxXZWJTZXR0aW5ncz4+KCk7CiAgICAgICAgIG1DdXN0b21Vc2VyQWdlbnRzID0gbmV3IFdlYWtIYXNoTWFwPFdlYlNldHRpbmdzLCBTdHJpbmc+KCk7Ci0KLSAgICAgICAgLy8gYWRkIGZvciBjYXJyaWVyIGZlYXR1cmUKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHNSZXNQYWNrYWdlQ3R4ID0gY29udGV4dC5jcmVhdGVQYWNrYWdlQ29udGV4dCgKLSAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuYnJvd3Nlci5yZXMiLAotICAgICAgICAgICAgICAgIENvbnRleHQuQ09OVEVYVF9JR05PUkVfU0VDVVJJVFkpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLmUoIlJlc19VcGRhdGUiLCAiQ3JlYXRlIFJlcyBBcGsgRmFpbGVkIik7Ci0gICAgICAgIH0KICAgICAgICAgQmFja2dyb3VuZEhhbmRsZXIuZXhlY3V0ZShtU2V0dXApOwogICAgIH0KIApAQCAtMjQ1LDY0ICsyMzEsMTIgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gYWRkIGZvciBjYXJyaWVyIGhvbWVwYWdlIGZlYXR1cmUKLSAgICAgICAgICAgIFN0cmluZyBicm93c2VyUmVzID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKFIuc3RyaW5nLmNvbmZpZ19jYXJyaWVyX3Jlc291cmNlKTsKLSAgICAgICAgICAgIGlmICgiY3UiLmVxdWFscyhicm93c2VyUmVzKSB8fCAiY21jYyIuZXF1YWxzKGJyb3dzZXJSZXMpKSB7Ci0gICAgICAgICAgICAgICAgaW50IHJlc0lEID0gc1Jlc1BhY2thZ2VDdHguZ2V0UmVzb3VyY2VzKCkuZ2V0SWRlbnRpZmllcigKLSAgICAgICAgICAgICAgICAgICAgICAgICJob21lcGFnZV9iYXNlIiwgInN0cmluZyIsICJjb20uYW5kcm9pZC5icm93c2VyLnJlcyIpOwotICAgICAgICAgICAgICAgIHNGYWN0b3J5UmVzZXRVcmwgPSBzUmVzUGFja2FnZUN0eC5nZXRSZXNvdXJjZXMoKS5nZXRTdHJpbmcocmVzSUQpOwotICAgICAgICAgICAgfSBlbHNlIGlmICgiY3QiLmVxdWFscyhicm93c2VyUmVzKSkgewotICAgICAgICAgICAgICAgIGludCByZXNJRCA9IHNSZXNQYWNrYWdlQ3R4LmdldFJlc291cmNlcygpLmdldElkZW50aWZpZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2VfYmFzZSIsICJzdHJpbmciLCAiY29tLmFuZHJvaWQuYnJvd3Nlci5yZXMiKTsKLSAgICAgICAgICAgICAgICBzRmFjdG9yeVJlc2V0VXJsID0gc1Jlc1BhY2thZ2VDdHguZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKHJlc0lEKTsKLQotICAgICAgICAgICAgICAgIGludCBwYXRoSUQgPSBzUmVzUGFja2FnZUN0eC5nZXRSZXNvdXJjZXMoKS5nZXRJZGVudGlmaWVyKAotICAgICAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlX3BhdGgiLCAic3RyaW5nIiwgImNvbS5hbmRyb2lkLmJyb3dzZXIucmVzIik7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHBhdGggPSBzUmVzUGFja2FnZUN0eC5nZXRSZXNvdXJjZXMoKS5nZXRTdHJpbmcocGF0aElEKTsKLSAgICAgICAgICAgICAgICBMb2NhbGUgbG9jYWxlID0gTG9jYWxlLmdldERlZmF1bHQoKTsKLSAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCIleSIsIGxvY2FsZS5nZXRMYW5ndWFnZSgpLnRvTG93ZXJDYXNlKCkpOwotICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoIiV6IiwgJ18nK2xvY2FsZS5nZXRDb3VudHJ5KCkudG9Mb3dlckNhc2UoKSk7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiB1c2VDb3VudHJ5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBib29sZWFuIHVzZUxhbmd1YWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgQXNzZXRNYW5hZ2VyIGFtID0gbUNvbnRleHQuZ2V0QXNzZXRzKCk7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgaXMgPSBhbS5vcGVuKHBhdGgpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVzZUNvdW50cnkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHNSZXNQYWNrYWdlQ3R4LmdldFJlc291cmNlcygpLmdldFN0cmluZyhwYXRoSUQpOwotICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCIleSIsIGxvY2FsZS5nZXRMYW5ndWFnZSgpLnRvTG93ZXJDYXNlKCkpOwotICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCIleiIsICIiKTsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzID0gYW0ub3BlbihwYXRoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWRsYW5ndWFnZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdXNlTGFuZ3VhZ2UgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkge30KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghdXNlQ291bnRyeSAmJiAhdXNlTGFuZ3VhZ2UpIHsKLSAgICAgICAgICAgICAgICAgICAgc0ZhY3RvcnlSZXNldFVybCA9IHNGYWN0b3J5UmVzZXRVcmwucmVwbGFjZSgiJXkleiIsICJlbiIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNGYWN0b3J5UmVzZXRVcmwgPSBzRmFjdG9yeVJlc2V0VXJsLnJlcGxhY2UoIiV5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGUuZ2V0TGFuZ3VhZ2UoKS50b0xvd2VyQ2FzZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgc0ZhY3RvcnlSZXNldFVybCA9IHNGYWN0b3J5UmVzZXRVcmwucmVwbGFjZSgiJXoiLCB1c2VDb3VudHJ5ID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXycgKyBsb2NhbGUuZ2V0Q291bnRyeSgpLnRvTG93ZXJDYXNlKCkgOiAiIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzRmFjdG9yeVJlc2V0VXJsID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKFIuc3RyaW5nLmhvbWVwYWdlX2Jhc2UpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc0ZhY3RvcnlSZXNldFVybCA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldFN0cmluZyhSLnN0cmluZy5ob21lcGFnZV9iYXNlKTsKIAogICAgICAgICAgICAgaWYgKCFtUHJlZnMuY29udGFpbnMoUFJFRl9ERUZBVUxUX1RFWFRfRU5DT0RJTkcpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCEiZGVmYXVsdCIuZXF1YWxzKGJyb3dzZXJSZXMpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1QcmVmcy5lZGl0KCkucHV0U3RyaW5nKFBSRUZfREVGQVVMVF9URVhUX0VOQ09ESU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVVEYtOCIpLmFwcGx5KCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1QcmVmcy5lZGl0KCkucHV0U3RyaW5nKFBSRUZfREVGQVVMVF9URVhUX0VOQ09ESU5HLCAiVVRGLTgiKS5hcHBseSgpOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoc0ZhY3RvcnlSZXNldFVybC5pbmRleE9mKCJ7Q0lEfSIpICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgc0ZhY3RvcnlSZXNldFVybCA9IHNGYWN0b3J5UmVzZXRVcmwucmVwbGFjZSgie0NJRH0iLAogICAgICAgICAgICAgICAgICAgICBCcm93c2VyUHJvdmlkZXIuZ2V0Q2xpZW50SWQobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCkpKTsKQEAgLTM0NywyMyArMjgxLDcgQEAKICAgICAgICAgc2V0dGluZ3Muc2V0U2F2ZVBhc3N3b3JkKHJlbWVtYmVyUGFzc3dvcmRzKCkpOwogICAgICAgICBzZXR0aW5ncy5zZXRTYXZlRm9ybURhdGEoc2F2ZUZvcm1kYXRhKCkpOwogICAgICAgICBzZXR0aW5ncy5zZXRVc2VXaWRlVmlld1BvcnQoaXNXaWRlVmlld3BvcnQoKSk7Ci0KLSAgICAgICAgLy8gYWRkIGZvciBjYXJyaWVyIHVzZXJhZ2VudCBmZWF0dXJlCi0gICAgICAgIFN0cmluZyB1YSA9IG51bGw7Ci0gICAgICAgIE9iamVjdCBvYmpVc2VyQWdlbnRIYW5kbGVyID0gUmVmbGVjdEhlbHBlci5uZXdPYmplY3QoCi0gICAgICAgICAgICAgICAgImNvbS5xcmQudXNlcmFnZW50LlVzZXJBZ2VudEhhbmRsZXIiLCBudWxsLCBudWxsKTsKLSAgICAgICAgT2JqZWN0W10gcGFyYW1zID0ge21Db250ZXh0fTsKLSAgICAgICAgQ2xhc3NbXSB0eXBlID0gbmV3IENsYXNzW10ge0NvbnRleHQuY2xhc3N9OwotICAgICAgICB1YSA9IChTdHJpbmcpIFJlZmxlY3RIZWxwZXIuaW52b2tlTWV0aG9kKG9ialVzZXJBZ2VudEhhbmRsZXIsImdldFVBU3RyaW5nIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgcGFyYW1zKTsKLSAgICAgICAgaWYgKHVhID09IG51bGwpCi0gICAgICAgICAgICB1YSA9IG1DdXN0b21Vc2VyQWdlbnRzLmdldChzZXR0aW5ncyk7Ci0KLSAgICAgICAgaWYgKHVhICE9IG51bGwpewotICAgICAgICAgICAgc2V0dGluZ3Muc2V0VXNlckFnZW50U3RyaW5nKHVhKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNldHRpbmdzLnNldFVzZXJBZ2VudFN0cmluZyhVU0VSX0FHRU5UU1tnZXRVc2VyQWdlbnQoKV0pOwotICAgICAgICB9CisgICAgICAgIHNldFVzZXJBZ2VudChzZXR0aW5ncyk7CiAKICAgICAgICAgV2ViU2V0dGluZ3Mgc2V0dGluZ3NDbGFzc2ljID0gKFdlYlNldHRpbmdzKSBzZXR0aW5nczsKICAgICAgICAgc2V0dGluZ3NDbGFzc2ljLnNldEhhcmR3YXJlQWNjZWxTa2lhRW5hYmxlZChpc1NraWFIYXJkd2FyZUFjY2VsZXJhdGVkKCkpOwpAQCAtMzg4LDYgKzMwNiwzNSBAQAogICAgICAgICBzZXR0aW5nc0NsYXNzaWMuc2V0TGlua1ByZWZldGNoRW5hYmxlZChtTGlua1ByZWZldGNoQWxsb3dlZCk7CiAgICAgfQogCisgICAgcHJpdmF0ZSB2b2lkIHNldFVzZXJBZ2VudChXZWJTZXR0aW5ncyBzZXR0aW5ncyl7CisgICAgICAgIFN0cmluZyB1YSA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldFN0cmluZyhSLnN0cmluZy5kZWZfdXNlcmFnZW50KTsKKworICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KHVhKSkKKyAgICAgICAgICAgIHVhID0gY29uc3RydWN0VXNlckFnZW50KHVhKTsKKworICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkodWEpKQorICAgICAgICAgICAgdWEgPSBtQ3VzdG9tVXNlckFnZW50cy5nZXQoc2V0dGluZ3MpOworCisgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodWEpKXsKKyAgICAgICAgICAgIHNldHRpbmdzLnNldFVzZXJBZ2VudFN0cmluZyh1YSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZXR0aW5ncy5zZXRVc2VyQWdlbnRTdHJpbmcoVVNFUl9BR0VOVFNbZ2V0VXNlckFnZW50KCldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIGNvbnN0cnVjdFVzZXJBZ2VudChTdHJpbmcgdXNlckFnZW50KSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB1c2VyQWdlbnQgPSB1c2VyQWdlbnQucmVwbGFjZUFsbCgiPCVidWlsZF9tb2RlbD4iLCBCdWlsZC5NT0RFTCk7CisgICAgICAgICAgICB1c2VyQWdlbnQgPSB1c2VyQWdlbnQucmVwbGFjZUFsbCgiPCVidWlsZF92ZXJzaW9uPiIsIEJ1aWxkLlZFUlNJT04uUkVMRUFTRSk7CisgICAgICAgICAgICB1c2VyQWdlbnQgPSB1c2VyQWdlbnQucmVwbGFjZUFsbCgiPCVidWlsZF9pZD4iLCBCdWlsZC5JRCk7CisgICAgICAgICAgICB1c2VyQWdlbnQgPSB1c2VyQWdlbnQucmVwbGFjZUFsbCgiPCVsYW5ndWFnZT4iLCBMb2NhbGUuZ2V0RGVmYXVsdCgpLmdldExhbmd1YWdlKCkpOworICAgICAgICAgICAgdXNlckFnZW50ID0gdXNlckFnZW50LnJlcGxhY2VBbGwoIjwlY291bnRyeT4iLCBMb2NhbGUuZ2V0RGVmYXVsdCgpLmdldENvdW50cnkoKSk7CisgICAgICAgICAgICByZXR1cm4gdXNlckFnZW50OworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfQorCiAgICAgLyoqCiAgICAgICogU3luY3MgYWxsIHRoZSBzZXR0aW5ncyB0aGF0IGhhdmUgbm8gVUkKICAgICAgKiBUaGVzZSBjYW5ub3QgY2hhbmdlLCBzbyB3ZSBvbmx5IG5lZWQgdG8gc2V0IHRoZW0gb25jZSBwZXIgV2ViU2V0dGluZ3MKQEAgLTY4Nyw3ICs2MzQsNyBAQAogICAgICAgICBXZWJTZXR0aW5ncyBzZXR0aW5ncyA9IHZpZXcuZ2V0U2V0dGluZ3MoKTsKICAgICAgICAgaWYgKG1DdXN0b21Vc2VyQWdlbnRzLmdldChzZXR0aW5ncykgIT0gbnVsbCkgewogICAgICAgICAgICAgbUN1c3RvbVVzZXJBZ2VudHMucmVtb3ZlKHNldHRpbmdzKTsKLSAgICAgICAgICAgIHNldHRpbmdzLnNldFVzZXJBZ2VudFN0cmluZyhVU0VSX0FHRU5UU1tnZXRVc2VyQWdlbnQoKV0pOworICAgICAgICAgICAgc2V0VXNlckFnZW50KHNldHRpbmdzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1DdXN0b21Vc2VyQWdlbnRzLnB1dChzZXR0aW5ncywgREVTS1RPUF9VU0VSQUdFTlQpOwogICAgICAgICAgICAgc2V0dGluZ3Muc2V0VXNlckFnZW50U3RyaW5nKERFU0tUT1BfVVNFUkFHRU5UKTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vYW5kcm9pZC9icm93c2VyL0Jyb3dzZXJXZWJWaWV3RmFjdG9yeS5qYXZhIGIvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvQnJvd3NlcldlYlZpZXdGYWN0b3J5LmphdmEKaW5kZXggY2FhMGNmOC4uOWY1ZTUwMyAxMDA2NDQKLS0tIGEvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvQnJvd3NlcldlYlZpZXdGYWN0b3J5LmphdmEKKysrIGIvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvQnJvd3NlcldlYlZpZXdGYWN0b3J5LmphdmEKQEAgLTY0LDE1ICs2NCw2IEBACiAgICAgICAgICAgICAgICAgfHwgcG0uaGFzU3lzdGVtRmVhdHVyZShQYWNrYWdlTWFuYWdlci5GRUFUVVJFX0ZBS0VUT1VDSF9NVUxUSVRPVUNIX0RJU1RJTkNUKTsKICAgICAgICAgdy5nZXRTZXR0aW5ncygpLnNldERpc3BsYXlab29tQ29udHJvbHMoIXN1cHBvcnRzTXVsdGlUb3VjaCk7CiAKLSAgICAgICAgLy8gYWRkIGZvciBjYXJyaWVyIGhvbWVwYWdlIGZlYXR1cmUKLSAgICAgICAgU3RyaW5nIGJyb3dzZXJSZXMgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRTdHJpbmcoUi5zdHJpbmcuY29uZmlnX2NhcnJpZXJfcmVzb3VyY2UpOwotICAgICAgICBpZiAoImN0Ii5lcXVhbHMoYnJvd3NlclJlcykpIHsKLSAgICAgICAgICAgIHcuZ2V0U2V0dGluZ3MoKS5zZXRKYXZhU2NyaXB0RW5hYmxlZCh0cnVlKTsKLSAgICAgICAgICAgIGlmIChtQ29udGV4dCBpbnN0YW5jZW9mIEJyb3dzZXJBY3Rpdml0eSkgewotICAgICAgICAgICAgICAgIHcuYWRkSmF2YXNjcmlwdEludGVyZmFjZShtQ29udGV4dCwgImRlZmF1bHRfaG9tZXBhZ2UiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCiAgICAgICAgIC8vIEFkZCB0aGlzIFdlYlZpZXcgdG8gdGhlIHNldHRpbmdzIG9ic2VydmVyIGxpc3QgYW5kIHVwZGF0ZSB0aGUKICAgICAgICAgLy8gc2V0dGluZ3MKICAgICAgICAgZmluYWwgQnJvd3NlclNldHRpbmdzIHMgPSBCcm93c2VyU2V0dGluZ3MuZ2V0SW5zdGFuY2UoKTsKZGlmZiAtLWdpdCBhL3NyYy9jb20vYW5kcm9pZC9icm93c2VyL0NvbnRyb2xsZXIuamF2YSBiL3NyYy9jb20vYW5kcm9pZC9icm93c2VyL0NvbnRyb2xsZXIuamF2YQppbmRleCA0MDZjNzNjLi4wMTIxOTFlIDEwMDY0NAotLS0gYS9zcmMvY29tL2FuZHJvaWQvYnJvd3Nlci9Db250cm9sbGVyLmphdmEKKysrIGIvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvQ29udHJvbGxlci5qYXZhCkBAIC0yMywxMiArMjMsMTAgQEAKIGltcG9ydCBhbmRyb2lkLmFwcC5Eb3dubG9hZE1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuUHJvZ3Jlc3NEaWFsb2c7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNsaXBib2FyZE1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFVyaXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRWYWx1ZXM7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlLk9uQ2FuY2VsTGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKQEAgLTEyOSwxNSArMTI3LDggQEAKICAgICAgICAgImFuZHJvaWQuc3BlZWNoLmV4dHJhcy5TRU5EX0FQUExJQ0FUSU9OX0lEX0VYVFJBIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5DT0dOSVRPX1VSSSA9ICJicm93c2VyOmluY29nbml0byI7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgT0ZGTElORV9QQUdFID0KLSAgICAgICAgImNvbnRlbnQ6Ly9jb20uYW5kcm9pZC5icm93c2VyLm15bmF2aWdhdGlvbi93ZWJzaXRlcyI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX1dJRklfU0VMRUNUSU9OX0RBVEFfQ09OTkVDVElPTiA9Ci0gICAgICAgICAgICAgImFuZHJvaWQubmV0LndpZmkuY21jYy5XSUZJX1NFTEVDVElPTl9EQVRBX0NPTk5FQ1RJT04iOwogICAgIC8vIFJlbWluZCBzd2l0Y2ggdG8gZGF0YSBjb25uZWN0aW9uIGlmIHdpZmkgaXMgdW5hdmFpbGFibGUKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS19TV0lUQ0hfVFlQRV9PSyA9IDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdJRklfQlJPV1NFUl9JTlRFUkFDVElPTl9SRU1JTkRfVFlQRSA9Ci0gICAgICAgICAgICAgIndpZmlfYnJvd3Nlcl9pbnRlcmFjdGlvbl9yZW1pbmQiOwogCiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgRVhUUkFfU0hBUkVfU0NSRUVOU0hPVCA9ICJzaGFyZV9zY3JlZW5zaG90IjsKICAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBFWFRSQV9TSEFSRV9GQVZJQ09OID0gInNoYXJlX2Zhdmljb24iOwpAQCAtMjA0LDYgKzE5NSw4IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIG1TaG91bGRTaG93RXJyb3JDb25zb2xlOwogICAgIHByaXZhdGUgYm9vbGVhbiBtTmV0d29ya1Nob3VsZE5vdGlmeSA9IHRydWU7CiAKKyAgICBwcml2YXRlIGJvb2xlYW4gbUpzSW50ZXJmYWNlRW5hYmxlZCA9IGZhbHNlOworCiAgICAgcHJpdmF0ZSBTeXN0ZW1BbGxvd0dlb2xvY2F0aW9uT3JpZ2lucyBtU3lzdGVtQWxsb3dHZW9sb2NhdGlvbk9yaWdpbnM7CiAKICAgICAvLyBGSVhNRSwgdGVtcCBhZGRyZXNzIG9uUHJlcGFyZU1lbnUgcGVyZm9ybWFuY2UgcHJvYmxlbS4KQEAgLTM0MSwxMSArMzM0LDEwIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFRhYiB0ID0gbnVsbDsKICAgICAgICAgICAgICAgICBpZiAodXJsRGF0YS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VzIHJlcyA9IG1BY3Rpdml0eS5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGJyb3dzZXJSZXMgPSByZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLmNvbmZpZ19jYXJyaWVyX3Jlc291cmNlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJyb3dzZXJSZXMuZXF1YWxzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbWNjIikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBvcGVuVGFiKE9GRkxJTkVfUEFHRSwgZmFsc2UsIHRydWUsIHRydWUpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbGFuZGluZ1BhZ2UgPSBtQWN0aXZpdHkuZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcuZGVmX2xhbmRpbmdfcGFnZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbGFuZGluZ1BhZ2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ID0gb3BlblRhYihsYW5kaW5nUGFnZSwgZmFsc2UsIHRydWUsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgdCA9IG9wZW5UYWJUb0hvbWVQYWdlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTg3NSwyNyArODY3LDQ4IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZU5ldHdvcmtOb3RpZnkoV2ViVmlldyB2aWV3KSB7CisgICAgICAgIGZpbmFsIFN0cmluZyByZW1pbmRlclR5cGUgPSBnZXRDb250ZXh0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKAorICAgICAgICAgICAgICAgIFIuc3RyaW5nLmRlZl93aWZpX2Jyb3dzZXJfaW50ZXJhY3Rpb25fcmVtaW5kX3R5cGUpOworICAgICAgICBmaW5hbCBTdHJpbmcgc2VsZWN0aW9uQ29ubm5lY3Rpb24gPSBnZXRDb250ZXh0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKAorICAgICAgICAgICAgICAgIFIuc3RyaW5nLmRlZl9hY3Rpb25fd2lmaV9zZWxlY3Rpb25fZGF0YV9jb25uZWN0aW9ucyk7CisKKyAgICAgICAgaWYgKHJlbWluZGVyVHlwZS5pc0VtcHR5KCkgfHwgc2VsZWN0aW9uQ29ubm5lY3Rpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIENvbm5lY3Rpdml0eU1hbmFnZXIgY29uTWdyID0gKENvbm5lY3Rpdml0eU1hbmFnZXIpIHRoaXMuZ2V0Q29udGV4dCgpLmdldFN5c3RlbVNlcnZpY2UoCiAgICAgICAgICAgICBDb250ZXh0LkNPTk5FQ1RJVklUWV9TRVJWSUNFKTsKICAgICAgICAgTmV0d29ya0luZm8gbmV0d29ya0luZm8gPSBjb25NZ3IuZ2V0QWN0aXZlTmV0d29ya0luZm8oKTsKICAgICAgICAgaWYgKG5ldHdvcmtJbmZvID09IG51bGwKICAgICAgICAgICAgIHx8IChuZXR3b3JrSW5mbyAhPSBudWxsICYmIChuZXR3b3JrSW5mby5nZXRUeXBlKCkgIT0KICAgICAgICAgICAgICAgICBDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfV0lGSSkpKSB7Ci0gICAgICAgICAgICBpbnQgaXNSZW1pbmRlciA9IFNldHRpbmdzLlN5c3RlbS5nZXRJbnQoCi0gICAgICAgICAgICAgICAgbUFjdGl2aXR5LmdldENvbnRlbnRSZXNvbHZlcigpLAotICAgICAgICAgICAgICAgIFdJRklfQlJPV1NFUl9JTlRFUkFDVElPTl9SRU1JTkRfVFlQRSwKLSAgICAgICAgICAgICAgICBORVRXT1JLX1NXSVRDSF9UWVBFX09LKTsKLQotICAgICAgICBpZiAoaXNSZW1pbmRlciA9PSBORVRXT1JLX1NXSVRDSF9UWVBFX09LKSB7Ci0gICAgICAgICAgICBtTmV0d29ya1Nob3VsZE5vdGlmeSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KAotICAgICAgICAgICAgICAgICAgICBBQ1RJT05fV0lGSV9TRUxFQ1RJT05fREFUQV9DT05ORUNUSU9OKTsKKyAgICAgICAgICAgIGludCBpc1JlbWluZGVyID0gU2V0dGluZ3MuU3lzdGVtLmdldEludChtQWN0aXZpdHkuZ2V0Q29udGVudFJlc29sdmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtaW5kZXJUeXBlLCBORVRXT1JLX1NXSVRDSF9UWVBFX09LKTsKKyAgICAgICAgICAgIGlmIChpc1JlbWluZGVyID09IE5FVFdPUktfU1dJVENIX1RZUEVfT0spIHsKKyAgICAgICAgICAgICAgICBtTmV0d29ya1Nob3VsZE5vdGlmeSA9IGZhbHNlOworICAgICAgICAgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KHNlbGVjdGlvbkNvbm5uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBpbnRlbnQuc2V0RmxhZ3MoSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX1RBU0spOwogICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29udGV4dCgpLnN0YXJ0QWN0aXZpdHkoaW50ZW50KTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtTmV0d29ya0hhbmRsZXIuaXNOZXR3b3JrVXAoKSkgeworICAgICAgICAgICAgICAgIGlmICghbU5ldHdvcmtIYW5kbGVyLmlzTmV0d29ya1VwKCkpCiAgICAgICAgICAgICAgICAgICAgIHZpZXcuc2V0TmV0d29ya0F2YWlsYWJsZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqKgorICAgICAqIEFkZC9yZW1vdmUgYSBKYXZhc2NyaXB0IGludGVyZmFjZSBmb3IgYSBsb2NhbCBkZWZhdWx0IGhvbWVwYWdlIG9ubHkKKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgaGFuZGxlSnNJbnRlcmZhY2UoV2ViVmlldyB3ZWJ2aWV3KXsKKyAgICAgICAgaWYgKHdlYnZpZXcuZ2V0VXJsKCkgIT0gbnVsbCAmJgorICAgICAgICAgICAgd2Vidmlldy5nZXRVcmwoKS5lcXVhbHMobUFjdGl2aXR5LmdldFJlc291cmNlcygpLmdldFN0cmluZyhSLnN0cmluZy5ob21lcGFnZV9iYXNlKSkgJiYKKyAgICAgICAgICAgIHdlYnZpZXcuZ2V0VXJsKCkuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkgeworICAgICAgICAgICAgICAgIG1Kc0ludGVyZmFjZUVuYWJsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHdlYnZpZXcuZ2V0U2V0dGluZ3MoKS5zZXRKYXZhU2NyaXB0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICB3ZWJ2aWV3LmFkZEphdmFzY3JpcHRJbnRlcmZhY2UobUFjdGl2aXR5LCAiZGVmYXVsdF9ob21lcGFnZSIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1Kc0ludGVyZmFjZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICB3ZWJ2aWV3LnJlbW92ZUphdmFzY3JpcHRJbnRlcmZhY2UoImRlZmF1bHRfaG9tZXBhZ2UiKTsKKyAgICAgICAgICAgICAgICBtSnNJbnRlcmZhY2VFbmFibGVkID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC05MDksMTUgKzkyMiwxNSBAQAogICAgICAgICAvLyB0byBzYXZlIGEgc2NyZWVuc2hvdCB0aGVuIHdlIHdpbGwgbm93IHRha2UgdGhlIG5ldyBwYWdlIGFuZCBzYXZlCiAgICAgICAgIC8vIGFuIGluY29ycmVjdCBzY3JlZW5zaG90LiBUaGVyZWZvcmUsIHJlbW92ZSBhbnkgcGVuZGluZyB0aHVtYm5haWwKICAgICAgICAgLy8gbWVzc2FnZXMgZnJvbSB0aGUgcXVldWUuCi0gICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKENvbnRyb2xsZXIuVVBEQVRFX0JPT0tNQVJLX1RIVU1CTkFJTCwKLSAgICAgICAgICAgICAgICB0YWIpOworICAgICAgICBtSGFuZGxlci5yZW1vdmVNZXNzYWdlcyhDb250cm9sbGVyLlVQREFURV9CT09LTUFSS19USFVNQk5BSUwsIHRhYik7CiAKICAgICAgICAgLy8gcmVzZXQgc3luYyB0aW1lciB0byBhdm9pZCBzeW5jIHN0YXJ0cyBkdXJpbmcgbG9hZGluZyBhIHBhZ2UKICAgICAgICAgQ29va2llU3luY01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5yZXNldFN5bmMoKTsKICAgICAgICAgV2lmaU1hbmFnZXIgd2lmaU1nciA9IChXaWZpTWFuYWdlcikgdGhpcy5nZXRDb250ZXh0KCkKICAgICAgICAgICAgIC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lGSV9TRVJWSUNFKTsKLSAgICAgICAgU3RyaW5nIGJyb3dzZXJSZXMgPSBtQWN0aXZpdHkuZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKFIuc3RyaW5nLmNvbmZpZ19jYXJyaWVyX3Jlc291cmNlKTsKLSAgICAgICAgaWYgKCJjbWNjIi5lcXVhbHMoYnJvd3NlclJlcykgJiYgbU5ldHdvcmtTaG91bGROb3RpZnkgJiYgd2lmaU1nci5pc1dpZmlFbmFibGVkKCkpIHsKKyAgICAgICAgYm9vbGVhbiBuZXR3b3JrTm90aWZpZXIgPQorICAgICAgICAgICAgbUFjdGl2aXR5LmdldEFwcGxpY2F0aW9uQ29udGV4dCgpLmdldFJlc291cmNlcygpLmdldEJvb2xlYW4oUi5ib29sLm5ldHdvcmtfbm90aWZpZXIpOworICAgICAgICBpZiAobmV0d29ya05vdGlmaWVyICYmIG1OZXR3b3JrU2hvdWxkTm90aWZ5ICYmIHdpZmlNZ3IuaXNXaWZpRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICBoYW5kbGVOZXR3b3JrTm90aWZ5KHZpZXcpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKCFtTmV0d29ya0hhbmRsZXIuaXNOZXR3b3JrVXAoKSkgewpAQCAtOTY4LDYgKzk4MSw3IEBACiAgICAgICAgIGludCBuZXdQcm9ncmVzcyA9IHRhYi5nZXRMb2FkUHJvZ3Jlc3MoKTsKIAogICAgICAgICBpZiAobmV3UHJvZ3Jlc3MgPT0gMTAwKSB7CisgICAgICAgICAgICBoYW5kbGVKc0ludGVyZmFjZSh0YWIuZ2V0V2ViVmlldygpKTsKICAgICAgICAgICAgIENvb2tpZVN5bmNNYW5hZ2VyLmdldEluc3RhbmNlKCkuc3luYygpOwogICAgICAgICAgICAgLy8gb25Qcm9ncmVzc0NoYW5nZWQoKSBtYXkgY29udGludWUgdG8gYmUgY2FsbGVkIGFmdGVyIHRoZSBtYWluCiAgICAgICAgICAgICAvLyBmcmFtZSBoYXMgZmluaXNoZWQgbG9hZGluZywgYXMgYW55IHJlbWFpbmluZyBzdWIgZnJhbWVzIGNvbnRpbnVlCkBAIC0xMDk2LDggKzExMTAsMTIgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGRvVXBkYXRlVmlzaXRlZEhpc3RvcnkoVGFiIHRhYiwgYm9vbGVhbiBpc1JlbG9hZCkgewotICAgICAgICAvLyBEb24ndCBzYXZlIGFueXRoaW5nIGluIHByaXZhdGUgYnJvd3NpbmcgbW9kZQotICAgICAgICBpZiAodGFiLmlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKSByZXR1cm47CisgICAgICAgIGJvb2xlYW4gZGlzYWJsZUhpc3RvcnlXcml0ZXMgPQorICAgICAgICAgICAgICAgIG1BY3Rpdml0eS5nZXRSZXNvdXJjZXMoKS5nZXRCb29sZWFuKFIuYm9vbC5kZWZfZGlzYWJsZV9oaXN0b3J5KTsKKworICAgICAgICAvLyBEb24ndCBzYXZlIGFueXRoaW5nIGluIHByaXZhdGUgYnJvd3NpbmcgbW9kZSBvciB3aGVuIGV4cGxpY2l0bHkgc2V0CisgICAgICAgIC8vIG5vdCB0byB3cml0ZSBoaXN0b3J5IHZpYSBhbiBvdmVybGF5CisgICAgICAgIGlmICh0YWIuaXNQcml2YXRlQnJvd3NpbmdFbmFibGVkKCkgfHwgZGlzYWJsZUhpc3RvcnlXcml0ZXMpIHJldHVybjsKICAgICAgICAgU3RyaW5nIHVybCA9IHRhYi5nZXRPcmlnaW5hbFVybCgpOwogCiAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eSh1cmwpCmRpZmYgLS1naXQgYS9zcmMvY29tL2FuZHJvaWQvYnJvd3Nlci9OYXZpZ2F0aW9uQmFyQmFzZS5qYXZhIGIvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvTmF2aWdhdGlvbkJhckJhc2UuamF2YQppbmRleCBmNGQ2M2Q5Li5kYTNmM2RhIDEwMDY0NAotLS0gYS9zcmMvY29tL2FuZHJvaWQvYnJvd3Nlci9OYXZpZ2F0aW9uQmFyQmFzZS5qYXZhCisrKyBiL3NyYy9jb20vYW5kcm9pZC9icm93c2VyL05hdmlnYXRpb25CYXJCYXNlLmphdmEKQEAgLTM3LDcgKzM3LDYgQEAKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmJyb3dzZXIuUjsKIGltcG9ydCBjb20uYW5kcm9pZC5icm93c2VyLlVybElucHV0Vmlldy5VcmxJbnB1dExpc3RlbmVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmJyb3dzZXIucmVmbGVjdC5SZWZsZWN0SGVscGVyOwogCiBpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwogaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKQEAgLTE3MSw5ICsxNzAsNyBAQAogICAgICAgICBzdG9wRWRpdGluZ1VybCgpOwogICAgICAgICBpZiAoVXJsSW5wdXRWaWV3LlRZUEVELmVxdWFscyhzb3VyY2UpKSB7CiAgICAgICAgICAgICBTdHJpbmcgdXJsID0gbnVsbDsKLSAgICAgICAgICAgIFN0cmluZyBicm93c2VyUmVzID0KLSAgICAgICAgICAgICAgICBnZXRDb250ZXh0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKFIuc3RyaW5nLmNvbmZpZ19jYXJyaWVyX3Jlc291cmNlKTsKLSAgICAgICAgICAgIGJvb2xlYW4gd2FwMmVzdG9yZSA9ICJjdCIuZXF1YWxzKGJyb3dzZXJSZXMpOworICAgICAgICAgICAgYm9vbGVhbiB3YXAyZXN0b3JlID0gZ2V0Q29udGV4dCgpLmdldFJlc291cmNlcygpLmdldEJvb2xlYW4oUi5ib29sLndhcDJlc3RvcmUpOwogICAgICAgICAgICAgaWYgKCh3YXAyZXN0b3JlICYmIGlzRXN0b3JlVHlwZVVybCh0ZXh0KSkgfHwgaXNSdHNwVHlwZVVybCh0ZXh0KQogICAgICAgICAgICAgICAgIHx8IGlzTWFrZUNhbGxUeXBlVXJsKHRleHQpKSB7CiAgICAgICAgICAgICAgICAgdXJsID0gdGV4dDsKZGlmZiAtLWdpdCBhL3NyYy9jb20vYW5kcm9pZC9icm93c2VyL05hdmlnYXRpb25CYXJQaG9uZS5qYXZhIGIvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvTmF2aWdhdGlvbkJhclBob25lLmphdmEKaW5kZXggNTBkZGVhMi4uYTUyNTdkMSAxMDA2NDQKLS0tIGEvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvTmF2aWdhdGlvbkJhclBob25lLmphdmEKKysrIGIvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvTmF2aWdhdGlvbkJhclBob25lLmphdmEKQEAgLTEzMiwxNSArMTMyLDcgQEAKICAgICAgICAgICAgIGlmICh0aXRsZSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbVVybElucHV0LnNldFRleHQoUi5zdHJpbmcubmV3X3RhYik7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFRhYiB0YWIgPSBtVWlDb250cm9sbGVyLmdldFRhYkNvbnRyb2woKS5nZXRDdXJyZW50VGFiKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRhYiAhPSBudWxsICYmIHRhYi5nZXRVcmwoKSAhPSBudWxsICYmCi0gICAgICAgICAgICAgICAgICAgICAgICB0YWIuZ2V0VXJsKCkuc3RhcnRzV2l0aCgiaHR0cDovLzIxOC4yMDYuMTc3LjIwOTo4MDgwL3dhcHRlc3QvYnJvd3NlcjE1IikpIHsKLSAgICAgICAgICAgICAgICAgICAgLy9mb3IgY21jYyB0ZXN0IGNhc2UsIGRpc3BsYXkgd2Vic2l0ZSB0aXRsZSBmb3Igc3BlY2lmaWVkIGNtY2Mgd2Vic2l0ZSwKLSAgICAgICAgICAgICAgICAgICAgLy9ub3QgdXJsIGFkZHJlc3MuCi0gICAgICAgICAgICAgICAgICAgIG1VcmxJbnB1dC5zZXRUZXh0KHRhYi5nZXRUaXRsZSgpLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbVVybElucHV0LnNldFRleHQoVXJsVXRpbHMuc3RyaXBVcmwodGl0bGUpLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1VcmxJbnB1dC5zZXRUZXh0KFVybFV0aWxzLnN0cmlwVXJsKHRpdGxlKSwgZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbVVybElucHV0LnNldFNlbGVjdGlvbigwKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvVGFiQ29udHJvbC5qYXZhIGIvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvVGFiQ29udHJvbC5qYXZhCmluZGV4IGUwYzMyODYuLmE5ZGE4Y2YgMTAwNjQ0Ci0tLSBhL3NyYy9jb20vYW5kcm9pZC9icm93c2VyL1RhYkNvbnRyb2wuamF2YQorKysgYi9zcmMvY29tL2FuZHJvaWQvYnJvd3Nlci9UYWJDb250cm9sLmphdmEKQEAgLTQxMCwyMiArNDEwLDYgQEAKICAgICAgICAgICAgICAgICAgICAgLy8gc05leHRJZCB0byBiZSBzZXQgY29ycmVjdGx5LgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBhZGQgZm9yIGNhcnJpZXIgaG9tZXBhZ2UgZmVhdHVyZQotICAgICAgICAgICAgICAgIC8vIElmIHRoZSB3ZWJ2aWV3IHJlc3RvcmUgc3VjY2Vzc2Z1bGx5LCBhZGQgamF2YXNjcmlwdCBpbnRlcmZhY2UgYWdhaW4uCi0gICAgICAgICAgICAgICAgV2ViVmlldyB2aWV3ID0gdC5nZXRXZWJWaWV3KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYnJvd3NlclJlcyA9IG1Db250cm9sbGVyLmdldEFjdGl2aXR5KCkuZ2V0QXBwbGljYXRpb25Db250ZXh0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKFIuc3RyaW5nLmNvbmZpZ19jYXJyaWVyX3Jlc291cmNlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCJjdCIuZXF1YWxzKGJyb3dzZXJSZXMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2aWV3LmdldFNldHRpbmdzKCkuc2V0SmF2YVNjcmlwdEVuYWJsZWQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobUNvbnRyb2xsZXIuZ2V0QWN0aXZpdHkoKSBpbnN0YW5jZW9mIEJyb3dzZXJBY3Rpdml0eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcuYWRkSmF2YXNjcmlwdEludGVyZmFjZShtQ29udHJvbGxlci5nZXRBY3Rpdml0eSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHRfaG9tZXBhZ2UiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgICAgIHRhYk1hcC5wdXQoaWQsIHQpOwogICAgICAgICAgICAgICAgIC8vIE1lIG11c3Qgc2V0IHRoZSBjdXJyZW50IHRhYiBiZWZvcmUgcmVzdG9yaW5nIHRoZSBzdGF0ZQogICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgYWxsIHRoZSBjbGllbnQgY2xhc3NlcyBhcmUgc2V0LgpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvVXBsb2FkSGFuZGxlci5qYXZhIGIvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvVXBsb2FkSGFuZGxlci5qYXZhCmluZGV4IDUxY2E3ZjkuLmUzZWRhMzMgMTAwNjQ0Ci0tLSBhL3NyYy9jb20vYW5kcm9pZC9icm93c2VyL1VwbG9hZEhhbmRsZXIuamF2YQorKysgYi9zcmMvY29tL2FuZHJvaWQvYnJvd3Nlci9VcGxvYWRIYW5kbGVyLmphdmEKQEAgLTExOSwxMCArMTE5LDEwIEBACiAgICAgICAgIH0KIAogICAgICAgICAvLyBBZGQgZm9yIGNhcnJpZXIgZmVhdHVyZSAtIHByZXZlbnQgdXBsb2FkaW5nIERSTSB0eXBlIGZpbGVzLgotICAgICAgICBTdHJpbmcgYnJvd3NlclJlcyA9IG1Db250cm9sbGVyLmdldEFjdGl2aXR5KCkuZ2V0UmVzb3VyY2VzKCkuCi0gICAgICAgICAgICAgICAgZ2V0U3RyaW5nKFIuc3RyaW5nLmNvbmZpZ19jYXJyaWVyX3Jlc291cmNlKTsKKyAgICAgICAgYm9vbGVhbiBkcm1VcGxvYWRFbmFibGVkID0gbUNvbnRyb2xsZXIuZ2V0Q29udGV4dCgpLmdldFJlc291cmNlcygpLmdldEJvb2xlYW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSLmJvb2wuZHJtX3VwbG9hZHMpOwogICAgICAgICBib29sZWFuIGlzRFJNRmlsZVR5cGUgPSBmYWxzZTsKLSAgICAgICAgaWYgKCJjdCIuZXF1YWxzKGJyb3dzZXJSZXMpICYmIGZpbGVQYXRoICE9IG51bGwKKyAgICAgICAgaWYgKGRybVVwbG9hZEVuYWJsZWQgJiYgZmlsZVBhdGggIT0gbnVsbAogICAgICAgICAgICAgICAgICYmIChmaWxlUGF0aC5lbmRzV2l0aCgiLmZsIikgfHwgZmlsZVBhdGguZW5kc1dpdGgoIi5kbSIpCiAgICAgICAgICAgICAgICAgfHwgZmlsZVBhdGguZW5kc1dpdGgoIi5kY2YiKSB8fCBmaWxlUGF0aC5lbmRzV2l0aCgiLmRyIikKICAgICAgICAgICAgICAgICB8fCBmaWxlUGF0aC5lbmRzV2l0aCgiLmRkIikpKSB7CmRpZmYgLS1naXQgYS9zcmMvY29tL2FuZHJvaWQvYnJvd3Nlci9VcmxIYW5kbGVyLmphdmEgYi9zcmMvY29tL2FuZHJvaWQvYnJvd3Nlci9VcmxIYW5kbGVyLmphdmEKaW5kZXggOTE0ZWRhZS4uYTM5MzZiNCAxMDA3NTUKLS0tIGEvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvVXJsSGFuZGxlci5qYXZhCisrKyBiL3NyYy9jb20vYW5kcm9pZC9icm93c2VyL1VybEhhbmRsZXIuamF2YQpAQCAtMjgsOSArMjgsNyBAQAogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRvYXN0OwogCiBpbXBvcnQgY29tLmFuZHJvaWQuYnJvd3Nlci5SOwotaW1wb3J0IGNvbS5hbmRyb2lkLmJyb3dzZXIucmVmbGVjdC5SZWZsZWN0SGVscGVyOwogCi1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwogaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKQEAgLTExMCw4ICsxMDgsOCBAQAogICAgICAgICB9CiAKICAgICAgICAgLy8gYWRkIGZvciBjYXJyaWVyIGZlYXR1cmUgLSB3YXAyZXN0b3JlCi0gICAgICAgIFN0cmluZyBicm93c2VyUmVzID0gbUFjdGl2aXR5LmdldFJlc291cmNlcygpLmdldFN0cmluZyhSLnN0cmluZy5jb25maWdfY2Fycmllcl9yZXNvdXJjZSk7Ci0gICAgICAgIGJvb2xlYW4gd2FwMmVzdG9yZSA9ICJjdCIuZXF1YWxzKGJyb3dzZXJSZXMpOworICAgICAgICBib29sZWFuIHdhcDJlc3RvcmUgPQorICAgICAgICAgICAgICAgIG1BY3Rpdml0eS5nZXRBcHBsaWNhdGlvbkNvbnRleHQoKS5nZXRSZXNvdXJjZXMoKS5nZXRCb29sZWFuKFIuYm9vbC53YXAyZXN0b3JlKTsKICAgICAgICAgaWYgKHdhcDJlc3RvcmUgJiYgaXNFc3RvcmVUeXBlVXJsKHVybCkgJiYgaGFuZGxlRXN0b3JlVHlwZVVybCh1cmwpKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvcHJvdmlkZXIvQnJvd3NlclByb3ZpZGVyMi5qYXZhIGIvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvcHJvdmlkZXIvQnJvd3NlclByb3ZpZGVyMi5qYXZhCmluZGV4IDhiOTY4YTkuLjA1NTA4YWQgMTAwNjQ0Ci0tLSBhL3NyYy9jb20vYW5kcm9pZC9icm93c2VyL3Byb3ZpZGVyL0Jyb3dzZXJQcm92aWRlcjIuamF2YQorKysgYi9zcmMvY29tL2FuZHJvaWQvYnJvd3Nlci9wcm92aWRlci9Ccm93c2VyUHJvdmlkZXIyLmphdmEKQEAgLTY1NiwyNSArNjU2LDE2IEBACiAgICAgICAgICAgICB2YWx1ZXMucHV0KEJvb2ttYXJrcy5ESVJUWSwgdHJ1ZSk7CiAgICAgICAgICAgICBkYi5pbnNlcnRPclRocm93KFRBQkxFX0JPT0tNQVJLUywgbnVsbCwgdmFsdWVzKTsKIAotICAgICAgICAgICAgLy8gYWRkIGZvciBjYXJyaWVyIGJvb2ttYXJrIGZlYXR1cmUKLSAgICAgICAgICAgIFN0cmluZyBicm93c2VyUmVzID0gZ2V0Q29udGV4dCgpLmdldFJlc291cmNlcygpLmdldFN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcuY29uZmlnX2NhcnJpZXJfcmVzb3VyY2UpOwotCi0gICAgICAgICAgICAvL2Rvbid0IGFkZCBkZWZhdWx0IGJvb2ttYXJrcyBmb3IgY21jYwotICAgICAgICAgICAgaWYgKCEiY21jYyIuZXF1YWxzKGJyb3dzZXJSZXMpKSB7Ci0gICAgICAgICAgICAgICAgYWRkRGVmYXVsdEJvb2ttYXJrcyhkYiwgRklYRURfSURfUk9PVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoImN0Ii5lcXVhbHMoYnJvd3NlclJlcykgfHwgImNtY2MiLmVxdWFscyhicm93c2VyUmVzKSkgewotICAgICAgICAgICAgICAgIGFkZERlZmF1bHRDYXJyaWVyQm9va21hcmtzKGRiLCBGSVhFRF9JRF9ST09UKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vYWRkIHRoZSBkZWZhdWx0IGJvb2ttYXJrcworICAgICAgICAgICAgYWRkRGVmYXVsdEJvb2ttYXJrcyhkYiwgRklYRURfSURfUk9PVCk7CiAgICAgICAgIH0KIAogICAgICAgICBwcml2YXRlIHZvaWQgYWRkRGVmYXVsdEJvb2ttYXJrcyhTUUxpdGVEYXRhYmFzZSBkYiwgbG9uZyBwYXJlbnRJZCkgewogICAgICAgICAgICAgUmVzb3VyY2VzIHJlcyA9IGdldENvbnRleHQoKS5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgICAgIGZpbmFsIENoYXJTZXF1ZW5jZVtdIGJvb2ttYXJrcyA9IHJlcy5nZXRUZXh0QXJyYXkoCi0gICAgICAgICAgICAgICAgICAgIFIuYXJyYXkuYm9va21hcmtzKTsKKyAgICAgICAgICAgIGZpbmFsIENoYXJTZXF1ZW5jZVtdIGJvb2ttYXJrcyA9IHJlcy5nZXRUZXh0QXJyYXkoUi5hcnJheS5ib29rbWFya3MpOwogICAgICAgICAgICAgaW50IHNpemUgPSBib29rbWFya3MubGVuZ3RoOwotICAgICAgICAgICAgVHlwZWRBcnJheSBwcmVsb2FkcyA9IHJlcy5vYnRhaW5UeXBlZEFycmF5KFIuYXJyYXkuYm9va21hcmtfcHJlbG9hZHMpOworICAgICAgICAgICAgU3RyaW5nW10gcHJlbG9hZHMgPSByZXMuZ2V0U3RyaW5nQXJyYXkoUi5hcnJheS5ib29rbWFya19wcmVsb2Fkcyk7CisKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHBhcmVudCA9IExvbmcudG9TdHJpbmcocGFyZW50SWQpOwogICAgICAgICAgICAgICAgIFN0cmluZyBub3cgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKQEAgLTY5NywxNyArNjg4LDI1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm93ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKTsiKTsKIAotICAgICAgICAgICAgICAgICAgICBpbnQgZmF2aWNvbklkID0gcHJlbG9hZHMuZ2V0UmVzb3VyY2VJZChpLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IHRodW1iSWQgPSBwcmVsb2Fkcy5nZXRSZXNvdXJjZUlkKGkgKyAxLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGZhdmljb25GaWxlTmFtZSA9IHByZWxvYWRzW2ldOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdGh1bWJGaWxlTmFtZSA9IHByZWxvYWRzW2krMV07CisKKyAgICAgICAgICAgICAgICAgICAgaW50IGZhdkljb25JZCA9IHJlcy5nZXRJZGVudGlmaWVyKGZhdmljb25GaWxlTmFtZSwgInJhdyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb250ZXh0KCkuZ2V0UGFja2FnZU5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIGludCB0aHVtYklkID0gcmVzLmdldElkZW50aWZpZXIodGh1bWJGaWxlTmFtZSwgInJhdyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29udGV4dCgpLmdldFBhY2thZ2VOYW1lKCkpOworCiAgICAgICAgICAgICAgICAgICAgIGJ5dGVbXSB0aHVtYiA9IG51bGwsIGZhdmljb24gPSBudWxsOworCiAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aHVtYiA9IHJlYWRSYXcocmVzLCB0aHVtYklkKTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYXZpY29uID0gcmVhZFJhdyhyZXMsIGZhdmljb25JZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmYXZpY29uID0gcmVhZFJhdyhyZXMsIGZhdkljb25JZCk7CiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgIGlmICh0aHVtYiAhPSBudWxsIHx8IGZhdmljb24gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFZhbHVlcyBpbWFnZVZhbHVlcyA9IG5ldyBDb250ZW50VmFsdWVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVZhbHVlcy5wdXQoSW1hZ2VzLlVSTCwgYm9va21hcmtEZXN0aW5hdGlvbi50b1N0cmluZygpKTsKQEAgLTcyMSw5NSArNzIwLDYgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgIHByZWxvYWRzLnJlY3ljbGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGFkZCBmb3IgY2FycmllciBib29rbWFyayBmZWF0dXJlCi0gICAgICAgIHByaXZhdGUgdm9pZCBhZGREZWZhdWx0Q2FycmllckJvb2ttYXJrcyhTUUxpdGVEYXRhYmFzZSBkYiwgbG9uZyBwYXJlbnRJZCkgewotICAgICAgICAgICAgQ29udGV4dCBtUmVzUGFja2FnZUN0eCA9IG51bGw7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIG1SZXNQYWNrYWdlQ3R4ID0gZ2V0Q29udGV4dCgpLmNyZWF0ZVBhY2thZ2VDb250ZXh0KAotICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuYnJvd3Nlci5yZXMiLAotICAgICAgICAgICAgICAgICAgICBDb250ZXh0LkNPTlRFWFRfSUdOT1JFX1NFQ1VSSVRZKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiQ3JlYXRlIFJlcyBBcGsgRmFpbGVkIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobVJlc1BhY2thZ2VDdHggPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIENoYXJTZXF1ZW5jZVtdIGJvb2ttYXJrcyA9IG51bGw7Ci0gICAgICAgICAgICBUeXBlZEFycmF5IHByZWxvYWRzID0gbnVsbDsKLSAgICAgICAgICAgIFJlc291cmNlcyByZXMgPSBtUmVzUGFja2FnZUN0eC5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgICAgIGludCByZXNCb29rbWFya3NJRCA9IHJlcy5nZXRJZGVudGlmaWVyKCJib29rbWFya3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFycmF5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5icm93c2VyLnJlcyIpOwotICAgICAgICAgICAgaW50IHJlc1ByZWxvYWRzSUQgPSByZXMuZ2V0SWRlbnRpZmllcigiYm9va21hcmtfcHJlbG9hZHMiLCAiYXJyYXkiLAotICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuYnJvd3Nlci5yZXMiKTsKLSAgICAgICAgICAgIGlmIChyZXNCb29rbWFya3NJRCAhPSAwICYmIHJlc1ByZWxvYWRzSUQgIT0gMCkgewotICAgICAgICAgICAgICAgIGJvb2ttYXJrcyA9IHJlcy5nZXRUZXh0QXJyYXkocmVzQm9va21hcmtzSUQpOwotICAgICAgICAgICAgICAgIHByZWxvYWRzID0gcmVzLm9idGFpblR5cGVkQXJyYXkocmVzUHJlbG9hZHNJRCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVGhlIERlZmF1bHQgQ2FycmllciBib29rbWFya3Mgc2l6ZQotICAgICAgICAgICAgaW50IHNpemUgPSBib29rbWFya3MubGVuZ3RoOwotCi0gICAgICAgICAgICAvLyBnb29nbGVTaXplIHRoZSBEZWZhdWx0IEdvb2dsZSBib29rbWFya3Mgc2l6ZS4KLSAgICAgICAgICAgIC8vIFRoZSBEZWZhdWx0IENhcnJpZXIgQm9va21hcmtzIG9yaWdpbmFsIHBvc2l0aW9uIG5lZWQgbW92ZSB0byBnb29nbGVTaXplIGluZGV4LgotICAgICAgICAgICAgZmluYWwgQ2hhclNlcXVlbmNlW10gZ29vZ2xlQm9va21hcmtzID0gZ2V0Q29udGV4dCgpLmdldFJlc291cmNlcygpLmdldFRleHRBcnJheSgKLSAgICAgICAgICAgICAgICAgICAgUi5hcnJheS5ib29rbWFya3MpOwotICAgICAgICAgICAgaW50IGdvb2dsZVNpemUgPSBnb29nbGVCb29rbWFya3MubGVuZ3RoOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcGFyZW50ID0gTG9uZy50b1N0cmluZyhwYXJlbnRJZCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5vdyA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSA9IGkgKyAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIENoYXJTZXF1ZW5jZSBib29rbWFya0Rlc3RpbmF0aW9uID0gcmVwbGFjZVN5c3RlbVByb3BlcnR5SW5TdHJpbmcoZ2V0Q29udGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2ttYXJrc1tpICsgMV0pOwotICAgICAgICAgICAgICAgICAgICBkYi5leGVjU1FMKCJJTlNFUlQgSU5UTyBib29rbWFya3MgKCIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb2ttYXJrcy5USVRMRSArICIsICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb2ttYXJrcy5VUkwgKyAiLCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb29rbWFya3MuSVNfRk9MREVSICsgIiwiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb29rbWFya3MuUEFSRU5UICsgIiwiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb29rbWFya3MuUE9TSVRJT04gKyAiLCIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb2ttYXJrcy5EQVRFX0NSRUFURUQgKwotICAgICAgICAgICAgICAgICAgICAgICAgIikgVkFMVUVTICgiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyIgKyBib29rbWFya3NbaV0gKyAiJywgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiciICsgYm9va21hcmtEZXN0aW5hdGlvbiArICInLCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCwiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgKyAiLCIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIudG9TdHJpbmcoZ29vZ2xlU2l6ZSArIGkpICsgIiwiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3cgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpOyIpOwotCi0gICAgICAgICAgICAgICAgICAgIGludCBmYXZpY29uSWQgPSBwcmVsb2Fkcy5nZXRSZXNvdXJjZUlkKGksIDApOwotICAgICAgICAgICAgICAgICAgICBpbnQgdGh1bWJJZCA9IHByZWxvYWRzLmdldFJlc291cmNlSWQoaSArIDEsIDApOwotICAgICAgICAgICAgICAgICAgICBieXRlW10gdGh1bWIgPSBudWxsLCBmYXZpY29uID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRodW1iID0gcmVhZFJhdyhyZXMsIHRodW1iSWQpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhdmljb24gPSByZWFkUmF3KHJlcywgZmF2aWNvbklkKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aHVtYiAhPSBudWxsIHx8IGZhdmljb24gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFZhbHVlcyBpbWFnZVZhbHVlcyA9IG5ldyBDb250ZW50VmFsdWVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVZhbHVlcy5wdXQoSW1hZ2VzLlVSTCwgYm9va21hcmtEZXN0aW5hdGlvbi50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYXZpY29uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVZhbHVlcy5wdXQoSW1hZ2VzLkZBVklDT04sIGZhdmljb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRodW1iICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVZhbHVlcy5wdXQoSW1hZ2VzLlRIVU1CTkFJTCwgdGh1bWIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KFRBQkxFX0lNQUdFUywgSW1hZ2VzLkZBVklDT04sIGltYWdlVmFsdWVzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgIHByZWxvYWRzLnJlY3ljbGUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvY29tL2FuZHJvaWQvYnJvd3Nlci9zZWFyY2gvU2VhcmNoRW5naW5lcy5qYXZhIGIvc3JjL2NvbS9hbmRyb2lkL2Jyb3dzZXIvc2VhcmNoL1NlYXJjaEVuZ2luZXMuamF2YQppbmRleCA5MWJkZGM4Li42NDQ5N2MzIDEwMDY0NAotLS0gYS9zcmMvY29tL2FuZHJvaWQvYnJvd3Nlci9zZWFyY2gvU2VhcmNoRW5naW5lcy5qYXZhCisrKyBiL3NyYy9jb20vYW5kcm9pZC9icm93c2VyL3NlYXJjaC9TZWFyY2hFbmdpbmVzLmphdmEKQEAgLTM1LDE5ICszNSwxMSBAQAogCiAgICAgcHVibGljIHN0YXRpYyBMaXN0PFNlYXJjaEVuZ2luZUluZm8+IGdldFNlYXJjaEVuZ2luZUluZm9zKENvbnRleHQgY29udGV4dCkgewogICAgICAgICBBcnJheUxpc3Q8U2VhcmNoRW5naW5lSW5mbz4gc2VhcmNoRW5naW5lSW5mb3MgPSBuZXcgQXJyYXlMaXN0PFNlYXJjaEVuZ2luZUluZm8+KCk7Ci0gICAgICAgIFJlc291cmNlcyByZXMgPSBjb250ZXh0LmdldFJlc291cmNlcygpOwotICAgICAgICBTdHJpbmdbXSBzZWFyY2hFbmdpbmVzID0gcmVzLmdldFN0cmluZ0FycmF5KFIuYXJyYXkuc2VhcmNoX2VuZ2luZXMpOwotICAgICAgICAvLyBhZGQgZm9yIGNhcnJpZXIgZmVhdHVyZSAtIHByZXNldCBzZWFyY2ggZW5naW5lCi0gICAgICAgIFN0cmluZyBicm93c2VyUmVzID0gcmVzLmdldFN0cmluZyhSLnN0cmluZy5jb25maWdfY2Fycmllcl9yZXNvdXJjZSk7CisgICAgICAgIFN0cmluZ1tdIHNlYXJjaEVuZ2luZXMgPSBjb250ZXh0LmdldFJlc291cmNlcygpLmdldFN0cmluZ0FycmF5KFIuYXJyYXkuc2VhcmNoX2VuZ2luZXMpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlYXJjaEVuZ2luZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gc2VhcmNoRW5naW5lc1tpXTsKLSAgICAgICAgICAgIGlmICgiY21jYyIuZXF1YWxzKGJyb3dzZXJSZXMpKSB7Ci0gICAgICAgICAgICAgICAgU2VhcmNoRW5naW5lSW5mbyBpbmZvID0gbmV3IFNlYXJjaEVuZ2luZUluZm8oY29udGV4dCwgbmFtZSk7Ci0gICAgICAgICAgICAgICAgc2VhcmNoRW5naW5lSW5mb3MuYWRkKGluZm8pOwotICAgICAgICAgICAgfSBlbHNlIGlmICghbmFtZS5zdGFydHNXaXRoKCJjbWNjIikpIHsKLSAgICAgICAgICAgICAgICBTZWFyY2hFbmdpbmVJbmZvIGluZm8gPSBuZXcgU2VhcmNoRW5naW5lSW5mbyhjb250ZXh0LCBuYW1lKTsKLSAgICAgICAgICAgICAgICBzZWFyY2hFbmdpbmVJbmZvcy5hZGQoaW5mbyk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBTZWFyY2hFbmdpbmVJbmZvIGluZm8gPSBuZXcgU2VhcmNoRW5naW5lSW5mbyhjb250ZXh0LCBuYW1lKTsKKyAgICAgICAgICAgIHNlYXJjaEVuZ2luZUluZm9zLmFkZChpbmZvKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc2VhcmNoRW5naW5lSW5mb3M7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3dlX2FuZHJvaWRfYnJvd3Nlci5neXBpIGIvc3dlX2FuZHJvaWRfYnJvd3Nlci5neXBpCmluZGV4IGMxYmNhZDQuLjFjMjM3ODUgMTAwNjQ0Ci0tLSBhL3N3ZV9hbmRyb2lkX2Jyb3dzZXIuZ3lwaQorKysgYi9zd2VfYW5kcm9pZF9icm93c2VyLmd5cGkKQEAgLTM1LDEyICszNSw2IEBACiAgICAgICAgICAgICAgICAgJzwoYXNzZXRzX2Rpcikvd21sL3N3ZV93bWwuY3NzJywKICAgICAgICAgICAgICAgXSwKICAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgICAnZGVzdGluYXRpb24nOiAnPChQUk9EVUNUX0RJUikvc3dlX2FuZHJvaWRfYnJvd3Nlcl9hcGsvYXNzZXRzJywKLSAgICAgICAgICAgICAgJ2ZpbGVzJzogWwotICAgICAgICAgICAgICAgICc8KGFzc2V0c19kaXIpL3FyZF9ob21lcGFnZS8nCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCiAgICAgICBdLAogICAgICAgJ2luY2x1ZGVzJzogWyAnLi4vLi4vYnVpbGQvamF2YV9hcGsuZ3lwaScgXSwKICAgICB9LAo=